Φτιάξτε ένα CMS με PHP και SEO links

Δεν είναι και λίγοι αυτοί που θέλουν να φτιάξουν ένα site, το οποίο θα βασίζεται σε ένα σύστημα που θα το γράψουν οι ίδιοι, είτε γιατί θέλουν να μάθουν μια γλώσσα προγραμματισμού (σε αυτήν την περίπτωση PHP), είτε γιατί τα έτοιμα CMS δεν τους καλύπτουν απόλυτα.

Έτσι είναι πολύ απλό να βρεις ένα free theme που ταιριάζει στις απαιτήσεις σου και να το τροποποιήσεις ώστε να φτιάξεις το site που επιθυμείς. Σε αυτό το άρθρο θα δούμε πως μπορείς να φτιάξεις ένα απλό CMS, το οποίο θα έχει και Search Engine Optimization (SEO), κάτι πολύ βασικό σήμερα.

Σίγουρα είναι πολύ απλό να φτιάξεις ένα site/blog σε ένα έτοιμο σύστημα όπως το Wordpress ή το Joomla, αλλά αυτά τα συστήματα είναι μερικές φορές "βαριά" για όσους επιλέξουν hosting με λίγα χρήματα και επίσης περιέχουν και πολλά άχρηστα πράγματα για τους περισσότερους (οι περισσότεροι θέλουν να γράφουν απλά τα άρθρα τους, γι'αυτό και επιλέγουν το blogger ή το δωρεάν host της wordpress.com), άσε που θέλουν και συνεχώς να τα ενημερώνεις.

Οπότε αν πιάνεσαι με PHP ή θέλεις να ξεκινήσεις, καλό είναι να κάνεις το δικό σου CMS, το οποίο θα είναι ελαφρύ, θα μπορείς να το δώσεις όπου θέλεις (πχ σε κάποιον πελάτη σου που θέλει να του φτιάξεις ένα blog, δεν θα ήταν σωστό για την φίρμα σου να μάθαινε ότι του πούλησες ένα open source σύστημα) και επιπλέον μπορείς να το τροποποιήσεις όπως θέλεις εσύ.

Seo Links

Τα φιλικά προς τις μηχανές αναζήτησης links (SEO), θα πρέπει να είναι -όπως το λέει το όνομα τους- φιλικά όχι μόνο στις μηχανές, αλλά και σε εμάς. Είναι ποιο απλό να γράψεις πχ "site.com/my-page/" παρά "site.com/index.php?type=blog&id=2". Οπότε θα πρέπει να δούμε πως θα δώσουμε στο script μας να καταλάβει ότι θέλουμε την σελίδα με ID2, χωρίς να χρειαστεί να την έχουμε στο URL μας.

Ξεκινώντας

Θα πρέπει να ορίσουμε στον servers μας να στέλνει όλες τις διευθύνσεις URL στην κύρια σελίδα μας. Για να γίνει αυτό θα χρειαστούμε ένα αρχείο .htaccess και φυσικά ο servers μας θα πρέπει να υποστηρίζει ρυθμίσεις με την χρήση τέτοιου αρχείου. Δεν χρειαζόμαστε πολλές εντολές, παρά μόνο να ενεργοποιήσουμε την επιλογή "RewriteEngine" και μετά την αποστολή όλων των αιτημάτων στο index.php αρχείο μας. Οπότε στο .htaccess βάζουμε το εξής:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^ index.php [L]
</IfModule>

Στο παραπάνω παράδειγμα, στέλνουμε όλα τα αιτήματα στο αρχείο index.php, παρά μόνο αν δεν είναι κάποιος φάκελος ή αρχείο στον server μας. Έτσι αν πρέπει να διαβαστεί ένα αρχείο, ο server θα το δώσει και δεν θα το στείλει στο index.php.

Βάση δεδομένων

Προτού συνεχίσουμε, θα πρέπει να δημιουργήσουμε πρώτα τους πίνακες στην βάση δεδομένων, ώστε να καταχορούνται εκεί τα στοιχεία που θέλουμε να χρησιμοποιήσουμε. Αν δεν ξέρετε πως να φτιάξετε μια βάση δεδομένων, δείτε αυτό το video.

CREATE TABLE post_categories (
cid smallint unsigned NOT NULL auto_increment,
name varchar(120) NOT NULL default '',
seo varchar(60) NOT NULL default '',
description text NOT NULL,
active tinyint(1) NOT NULL default '1',
posts int unsigned NOT NULL default '0'
PRIMARY KEY (cid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE posts (
pid int unsigned NOT NULL auto_increment,
cid int unsigned NOT NULL default '0',
subject varchar(120) NOT NULL default '',
seo varchar(60) NOT NULL default '',
username varchar(80) NOT NULL default '',
dateline int unsigned NOT NULL default '0',
post text NOT NULL,
draft tinyint(1) NOT NULL default '0',
KEY pid (pid),
KEY draft (draft),
KEY dateline (dateline)
PRIMARY KEY (pid)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

INSERT INTO post_categories (cid, name, seo, description) VALUES (1, 'My Category', 'my-category', 'Test Category');

INSERT INTO posts (pid, cid, subject, seo, post, username, dateline) VALUES (1, 1, 'My Post', 'my-post', 'Test Post<br />\r\nΑυτό είναι ένα δοκιμαστικό post.', 'User', UNIX_TIMESTAMP());

Το αρχείο index.php

Αφού έχουμε όλα τα αιτήματα να έρχονται στο index.php αρχείο, θα πρέπει τώρα να κάνουμε το αρχείο αυτό ικανό να δει τα αιτήματα αυτά και να αναζητήσει στην βάση δεδομένων το που αντιστοιχούν. Αφού είδαμε παραπάνω την βάση δεδομένων, ας δούμε πως θα μπορέσουμε να κάνουμε με ασφάλεια το ερώτημα στην βάση δεδομένων.

<php
$link = str_replace( "/", "", urldecode( $_SERVER[ "REQUEST_URI" ] ));
$db_connection = new mysqli( "localhost", "dbuser", "dbpass", "dbname");
$db_connection->query( "SET NAMES 'UTF8'" );
$query = $db_connection->prepare( 
"SELECT p.subject, p.pid, p.post, p.username, p.dateline, c.name, c.seo as c_seo
FROM posts as p
INNER JOIN post_categories as c ON c.cid = p.pid
WHERE p.seo = ?" 
);

$query->bind_param( "s", $link);
$query->execute();
$query->bind_result($subject,$pid,$post,$username,$dateline,$name,$c_seo);
$query->fetch();
$query->close();
if($pid == 0)
{
header('HTTP/1.0 404 Not Found', true, 404);
  include ('my-404-page.php');
  exit; 
  }

$db_connection->close();
echo 'Post ID: ' . $pid . '<br />';
echo 'Username: ' . $username . '<br />';
echo 'Title: ' . $subject . '<br />';
echo 'Post: ' . $post . '<br />';
echo 'Date: ' . date('d-m-Y', $dateline) . '<br />';
?>

Όπως είδαμε, πήραμε τα στοιχεία που μας χρειάζονται από τo URL, αφαιρέσαμε το "/" και χρησιμοποιήσαμε το "urldecode".

Χρησιμοποιόντας την λειτουργία "bind_result", δώσαμε στις μεταβλητές τα αντίστοιχα πεδία της βάσης μας. Το μόνο που έχουμε να κάνουμε είναι να τα προσαρμόσουμε στην σελίδα μας. Φυσικά απαιτούνται περισσότερα πράγματα για να ολοκληρωθεί το project μας, όπως η σελίδα διαχείρισης όπου θα προσθέτουμε, αφαιρούμε και επεξεργαζόμαστε τα άρθρα μας, η αλλαγή του τίτλου στην seo του μορφή (και αν θέλουμε να αλλάζει τους Ελληνικούς χαρακτήρες σε αντίστοιχους λατινικούς), αν θέλουμε να βάλουμε tags στα άρθρα μας και πολλά άλλα.

Το άρθρο είναι γραμμένο σε όσο το δυνατόν πιο απλό τρόπο, ώστε να καταλάβετε τα βασικά. Δεν είναι προσαρμοσμένο για τις ανάγκες ενός μεγάλου CMS, αφού όπως είπαμε κάτι τέτοιο απαιτεί περισσότερα πράγματα. Το να έχεις άρθρα με φιλικά urls δεν είναι καθόλου δύσκολο και τα περισσότερα σχεδόν CMS το καλύπτουν αυτό. Εδώ για παράδειγμα, μπορείς να δεις μερικά CMS πέραν του Wordpress, σε περίπτωση που δεν επιθυμείς το WP ή θέλεις κάτι πιο απλό και ελαφρύ και δεν θέλεις να ασχοληθείς εσύ με αυτό.