onOn the first day of Kirby Week, Four Island gave to me: A tutorial on coding a blogging engine.
Welcome to Kirby Week 2008. As I told you yesterday, I'm going to spend this week teaching you how to write your own blogging engine. As we go along, we'll be adding many enhancements and such, but for now, we'll be starting with the basics. The blog you will be building will be loosely based on the SimpleBlog engine.
To do this tutorial, you, of course, need:
- A Web Server
- PHP
- MySQL
We'll start with creating the base directory structure. In your webroot, create a folder called kirbyweek08. Create a css folder inside that folder.
Next, we need to set up the database. Create a new database called "kirbyweek08" and use this schema to create the tables:
CREATE TABLE `posts` ( `id` int(11) NOT NULL auto_increment, `title` varchar(255) NOT NULL, `text` text NOT NULL, `slug` varchar(255) NOT NULL, `pubDate` timestamp NOT NULL default CURRENT_TIMESTAMP, `tags` varchar(255) NOT NULL, PRIMARY KEY (`id`) );We need to let your site connect to the database. So, create a
db.phpin the kirbyweek08 folder, and put this in it:<?php $dbwebhost = 'localhost'; $dbwebuser = 'root'; $dbwebpasswd = ''; $dbwebname = 'kirbyweek08'; mysql_connect($dbwebhost, $dbwebuser, $dbwebpasswd); mysql_select_db($dbwebname); ?>
$dbwebhostand$dbwebnameare probably correct for you, but swap in the correct values for$dbwebuserand$dbwebpasswd(a.k.a. username and password of someone with permission to access and modify the kirbyweek08 database). Now that that's done, we can start making the blog.Create an
index.phpfile in your kirbyweek08 folder, and put this in it:<?php require_once('db.php'); require_once('functions.php'); include('header.php'); $getposts = "SELECT * FROM posts LIMIT 0,4"; $getposts2 = mysql_query($getposts); $i=0; while ($getposts3[$i] = mysql_fetch_array($getposts2)) { displayPost($getposts3[$i],true); $i++; } include('footer.php'); ?>A little explanation is required here. First, this file connects to the database by loading the
db.phpfile we created before. Second, it loads a file calledfunctions.phpthat we haven't created yet, and a file calledheader.phpthat we also haven't created yet. These files will contain useful functions reused often in your code, and a header to display above every file, respectively.Next, the file downloads the latest four posts from your database and uses a function called
displayPost()to display it. Finally, it loads a non-existent file calledfooter.phpwhich will contain a footer.The most important part is the
displayPost()function. It will lie in thefunctions.phpfile. Instead of posting the code, I'm just going to link to it because it's rather long and it goes off of the side of the post.Wow! That was a lot. Don't worry, that's the longest code snippet in this application. Whew. I think it's time for testing. However, if we test it now, there'll be nothing to see. First, add a record to the posts database.
The fields are simple. Ignore
idandpubDate, they're automatically generated by MySQL.titleandtextshould be self-explanatory.tagsis a comma-deliminated list of tags for the post. Now we can test it.You should see your post, surrounded by tons of errors. Oops. We forgot to make the header and footer! Also, you'll notice that it's saying your post is by "Anonymous". Want to fix that? Notice at the top of
functions.php, a variable named$author. Set that to your username and you're set.Let's create that header. Basically, you can put whatever you like in it. Just remember that it is pasted above the contents of every file, so make sure that a
<BODY>tag has been opened by the time the file ends. Use this as an opportunity to theme this new blog with the rest of your site! Follow suit withfooter.phpas well, it's just a footer.Nearly done! Now, all we have to do is create the other two files linked to by the
displayPost()function. Here'sread.php:<?php require_once('db.php'); require_once('functions.php'); include('header.php'); $getpost = "SELECT * FROM posts WHERE id = " . $_GET['id']; $getpost2 = mysql_query($getpost); $getpost3 = mysql_fetch_array($getpost2); displayPost($getpost3, false); include('footer.php'); ?>And
tag.php:<?php require_once('db.php'); require_once('functions.php'); include('header.php'); $getposts = "SELECT * FROM posts WHERE tags LIKE \"%" . $_GET['tag'] . "%\" LIMIT 0,4"; $getposts2 = mysql_query($getposts); $i=0; while ($getposts3[$i] = mysql_fetch_array($getposts2)) { displayPost($getposts3[$i],true); $i++; } include('footer.php'); ?>We'll, we're pretty much done! I know, I know, it's mediocre. Don't worry, during this week we'll really spruce it up. Thank you for surviving that long tutorial, the rest is more fun.
You'll have noticed that there's no way you can post to this blog short of manually editing the database. Tomorrow we'll be looking at creating an admin panel for you to use for your bloggy funness. Enjoy!
DEC
14

Comments