Créer un blog en 20 mn Tout d abord, créer la base de données qui contiendra le blog Avec phpmyadmin définir une base de données de nom blog Définir une table de nom entries Dans cette table, on créera - un champ de nom id, auto-incrémental, crée primaire - un champ de nom title (varchar de 128 caractères) - un champ de nom body (text) qui contiendra les informations du weblog. CREATE TABLE `blog` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `title` VARCHAR( 128 ) NOT NULL, `body` TEXT NOT NULL ) TYPE = MYISAM ; Il faut ensuite configurer le fichier database.php (dans system/application/config) pour qu il contienne les informations relatives à la base de données ainsi créée. Prendre en compte la base de données Pour cela, configurer le fichier autoload.php (dans system/application/config) : $autoload['libraries'] = array('database'); Ajouter rapidement des enregistrements dans la table entries Pour utiliser la base de données, on utilise le scaffolding. Pour ça, ajouter l utilisation de la table «entries» dans le constructeur de la classe Blog : $this->load->scaffolding('entries'); rque : cette ligne ne sert que temporairement pour ajouter des enregistrements à la table entries (on la met en commentaires tout de suite) Il faut ensuite configurer routes.php en précisant : $route['scaffolding_trigger'] = "scaffolding"; Ceci permettra d entrer de manière sécurisée des enregistrements dans la table entries. Pour cela, il suffit d afficher l adresse : http://../codeigniter/index.php/blog/scaffolding/ Cette interface permet de gérer les enregistrements de la table entries (citée dans le constructeur) : ajout, suppression, modification.
Prendre en compte les enregistrements de la table pour afficher leur contenu Modifier la classe Blog : La requête qui va chercher les enregistrements dans la table entries s écrit : $data['query']=$this->db->get('entries'); Modifier le viewer pour prendre le résultat de cette requête : Pour chaque enregistrement trouvé, on affiche chacun des champs : <?php foreach($query->result() as $row):?> <h3><?=$row->title?></h3> <p><?=$row->body?></p> <hr> <?php endforeach;?> Mettre des commentaires aux billets : Pour pouvoir ajouter des commentaires à la lecture du blog, nous utilisons deux modules de codeigniter : url et form (dans system/helpers) On va donc charger ces modules pour pouvoir les utiliser en incluant les lignes suivantes dans le constructeur de la classe Blog : $this->load->helper('url'); $this->load->helper('form'); Mettre un lien qui permet d accéder au formulaire d ajout d un commentaire : On ajoute la ligne suivante à l intérieur de la boucle dans blog_view.php : <p><?=anchor('blog/comments', 'Comments');?></p> Pour que le futur commentaire se rapporte bien au billet qu il suit, on ajoute le numéro de billet à l url (id dans la table entries de la base de données) : <p><?=anchor('blog/comments/'.$row->id, 'Comments');?></p> L ancre est bien présente, mais le lien n existe pas encore. Il faudra ajouter la fonction comments dans la classe Blog : Créer la table qui contiendra les commentaires CREATE TABLE `comments` ( `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY, `entry_id` INT( 11 ) NOT NULL,
`body` TEXT NOT NULL, `author` VARCHAR( 100 ) NOT NULL ) TYPE = MYISAM ; Créer le formulaire A l aide de la fonction form_open qui prend en argument l artion à exécuter lors de sa validation (ici comment_insert) : <?=form_open('blog/comment_insert');?> De plus, il faudra pouvoir faire référence au billet concerné par ce commentaire (c est le nombre qui apparaît à la suite de comment dans l url. On ajoute alors un champ caché (form_hidden, de nom «entry_id» et dont la valeur est le 3 ième segment de uri du formulaire : <?=form_hidden('entry_id', $this->uri->segment(3));?> Ajouter les champs de saisie des informations : <p><textarea name="body" rows="10"></textarea></p> <p><input type="text" name="author"/></p> <p><input type="submit"value="valider le commentaire" /></p> Ne pas oublier de fermer le formulaire! </form> Définir l action du formulaire La fonction à créer dans le controller s appelle comment_insert, comme indiqué dans l argument de l ouverture de formulaire (form_open) Il faut donc ajouter cette fonction dans la classe Blog : Pour ça, on utilise la fonction de manipulation de base de données insert qui prend en arguments la table dans laquelle s effectue cette insertion et le tablea $_POST qui contient les paramètres transmis par le formulaire : function comment_insert() { $this->db->insert('comments',$_post); redirect('blog/comments/'.$_post["entry_id"]); } La seconde ligne permet d ajouter dans la foulée un autre commentaire au même billet. Afficher l ensemble des commentaires d un billet On prévoit de ne sélectionner que les commentaires correspondant à ce billet, et créant une claus where :
$this->db->where('entry_id',$this->uri->segment(3)); Puis, on ajoute à cette fonction comments une requête à la base pour chercher tous les commentaires déjà faits sur ce billet : $data['query']=$this->db->get('comments'); Il reste à modifier le comment_view pour qu il prenne en compte ces deux requêtes : Version finale de ce fichier : <html> <head> <title><?php echo $title ;?></title> </head> <body> <h1><?php echo $entete ;?></h1> <?php if ($query->num_rows() >0 ):?> <?php foreach($query->result() as $row):?> <h3><?=$row->body?></h3> <p><?=$row->author?></p> <hr> <?php endforeach;?> <?php endif;?> <p><?=anchor('blog/', 'Back to Blog');?></p> <?=form_open('blog/comment_insert');?> <?=form_hidden('entry_id', $this->uri->segment(3));?> <p><textarea name="body" rows="10"></textarea></p> <p><input type="text" name="author"/></p> <p><input type="submit" value="valider le commentaire" /></p> </form> </body> </html> remarques : la clause if gère le cas où il n y aurait encore aucun commentaire : par d affichage.
Pour chaque commentaire, on affiche son texte et son auteur. On met un lien pour revenir au blog après avoir affiché les commentaires. Le formulaire d insertion d un commentaire reste visible tant qu on n est pas revenu au blog.