banniere
Ecrit par leknoppix le 2-02-2010 à 20:30:32
Cake php, afficher les articles avec systeme de pagination

Comme beaucoup m'ont dit, le lancement d'une série de tutoriel est quelque chose de très long et dur. Cela est encore plus vrai lorsque l'on s'attaque à la comparaison entre 2 Frameworks. Voici donc un nouveau tutoriel sur cakephp qui vous permettra de comprendre comment fonctionne l'affichage d'articles sur une page.

Dans le dernier tutoriel consacré aux bases de données, nous avons vu comment lier la base de données au Framework. Nous avons également créé la base de données qui est actuellement vide. Vous pouvez donc commencer à y enregistrer des informations « bidons » pour avoir un rendu visuel. Pour l’affichage et les tests, j’ai créé 2 catégories (catégorie 1 et catégorie 2) ainsi que 3 articles donc 2 reliés à la catégorie 1 et 1 à la catégorie 2. Voici le code sql correspondant :

INSERT INTO `categories` VALUES(1, 'categorie 1');
INSERT INTO `categories` VALUES(2, 'categorie 2');
INSERT INTO `posts` VALUES(2, 'Titre pour l''article 1', 'Texte de l''article 1 categorie 1', '2010-01-01 15:43:30', 1);
INSERT INTO `posts` VALUES(3, 'Titre pour l''article 2', 'Texte de l''article 2 categorie 1', '2010-01-01 15:43:30', 1);
INSERT INTO `posts` VALUES(4, 'Titre pour l''article 3', 'Texte de l''article 3 categorie 2', '2010-01-01 15:43:30', 2);

Il faut savoir que cakePHP fonctionne avec un système MVC (modèle-vue-controler). Je vous renvoie sur un article de wikipédia présentant ce type d’architecture MVC.

I Création du modèle:

Nous allons donc commencer à créer un modèle. Il s'agit en fait d'une classe qui interagira avec la base de données. Ce premier modèle sera directement lié à la table "posts". Pour faire simple et vraiment schématisé, ce modèle gèrera tous les selects qui afficheront les titres, les contenus .... Nous allons donc commencer par créer un fichier post.php dans le dossier app/models.

Ce dossier contiendra l'ensemble des modèles de ce projet mais également ceux de vos projets. Dans ce nouveau fichier, tapez le code suivant:

<?php
class Post extends AppModel
{
//la variable $name permet d'indiquer le nom de la classe pour la version 4 de PHP
var $name = 'Post';
}
?>

Je vais essayer de vous décrypter un peu cette classe.
Le nom de la classe doit être le même que celui du fichier et de la base de données. Cela va permettre d'identifier la bonne table. La variable $name permet d'indiquer le nom de la classe pour les versions antérieures à PHP5.

L'extension AppModel permet d'étendre la classe model (incluse dans cakePHP) à la classe Post, il s'agit d'une convention.

II Création du controller:

Maintenant la seconde étape consiste à concevoir le controller. Ce premier s'appellera posts_controller.php et sera mis dans le dossier app/controller. Ce dernier controllera l'affichage des articles ainsi que les liens, les images qui seront affichés. Le fichier récemment créé devra contenir une classe appellé PostsController. Voici le code source: 

<?php
class PostsController extends AppController{
var $name="Posts";
}
?> 

Dans ce fichier, AppController permet d'étendre la classe controller (incluse dans cakePHP) à la classe Post, il s'agit d'une convention.

Passons aux choses sérieuses, nous allons commencer à créer la première action ou fonctionnalité. Pour cela, nous allons devoir rajouter des informations dans le fichier /app/controller/posts_controller.php. Pour créer cette fonctionnalité, nous allons créer une fonction appelée index.

<?php
class PostsController extends AppController{
var $name="Posts";
function index()
{
$q="bienvenu";
}
}
?>

Regardons ce que votre navigateur affiche lorsque vous tapez http://localhost/phpcake/posts/index dossier de base de cakephp/posts/index. (cf imprim ecran joint).

image1

III Création de la vue:

Vous voyez également des messages affichés dans des cadres rouges. Cela est tout à fait normal car nous n'avons pas créé de vues correspondant à notre controller. Nous allons donc créer un dossier appelé posts et le positionner dans le dossier app/views. Afin de simplifier, le nom de ce dossier doit être le même que celui du controller. Ce dossier contiendra la vue de chaque action. Nous allons créer un fichier index.ctp correspondant à l'action index. Le format ctp est inclus dans la convention de cakephp.

La question que vous devez vous poser maintenant est, quel langage de programmation dois-je utiliser? La réponse est assez simple, vous pouvez insérer du php, html, css, js ......

Voici un exemple:

<h1>Création de ma première vue</h1>
<?php echo "coucou"; ?>

image2

IV Système d'affichage de l'article:

L'action du controller et la vue doivent être liés entre eux. Retournons à notre fichier posts_controller.php et ajoutons la ligne de code suivant.

$this->set('articles',$q);

Vous obtiendrez donc:

<?php
class PostsController extends AppController{
var $name="Posts";
function index(){
$q="bienvenu";
$this->set('articles',$q);
}
}
?>

L'instruction set est la fonction qui permet d'envoyer le contenu désiré dans la vue. Dans cet exemple, "articles" sera le nom de la variable permettant d'afficher le contenu.
Ensuite un simple affichage de variable php dans le fichier index.ctp et le tour est joué.

<h1>Création de ma première vue</h1>
<?php echo "coucou"; ?>
<?php echo $articles; ?>

Nous allons maintenant passez à la vraie première action qui permettra d'afficher les articles contenus dans la base de données.
Nous allons rééditer encore une fois le fichier posts_controller.php. Je vous conseille de vous référer à la documentation officielle: book.cakephp.org.

<?php
class PostsController extends AppController{
var $name="Posts";
function index(){
//$this indique l'instance en cours
//2nd paramètre indique le nom du Model
//3nd Paramètre permet de récupérer les informations (equivalent de select...) intégré dans cakephp Plus d'info dans book.cakephp.org
//le paramètre all permet de récupérer tout les champs de la base de donnée, cf docs
$envoieversvue=$this->Post->find('all');
//Une fois les élements dans la base de donnée récupérer, il faut envoyer à la vue le bon contenu. Pour envoyer le résultat à la vue, il faut faire ceci
//Set() permet d'envoyer le contenu à la vue
//article est le nom de la variable qui récupèrera le contenu.
$this->set('articles',$envoieversvue);
}
}
?>

Débutant également sur cakePHP, je me permet de bien commenter mes codes pour que je puisse mieux les expliquer dans mes tutoriels. Lorsque vous retournez sur votre navigateur et accédez à l'adresse http://localhost/phpcake/posts/index, vous devriez avoir ceci: 

image3

Cependant, regardez les 2 lignes que nous avons écrites plus haut mais aucun contenu correspondant au contenu de la base de données. En fait dans la réalité, la variable $articles présente dans le fichier index.ctp, contient bien les données récupérées dans la base de données, mais sous forme de tableau.
Voyons maintenant de quelle forme est ce tableau. Pour cela, nous allons utiliser une fonction présente dans cakephp, la fonction débug. Nous aurons donc comme code source (du fichier index.ctp) :

<h1>Création de ma première vue</h1>
<?php echo "coucou"; ?><br />
<?php
debug($articles);
?>

Cette fonction peut être comparée aux codes suivants que certains utilisent pour faire un mode débugage artisanal!

<?php
echo "<pre>";
print_r($articles);
echo "</pre>";
?>

Nous obtiendrons donc un écran ressemblant à celui-ci:

image4

 Nous avons bientôt fini. Nous allons maintenant afficher, d'une façon plus correcte et lisible, les articles présents dans la base de données. Modifions encore une dernière fois le fichier index.ctp. Nous venons de voir que $articles était un tableau, nous allons utiliser une boucle foreach dans le but de récupérer les éléments désirés.

<h1>Création de ma première vue</h1>
<?php echo "coucou"; ?><br />
<?php
foreach($articles as $article)
{
echo "<h1>Le titre de l'article est: ".$article['Post']['title']."</h1>";
echo "<p>La contenu de cet article est: </p>";
echo $article['Post']['content'];
echo "<hr/>";
}
?>

Comme vous le voyez il est assez simple d'afficher les contenus souhaités.

image5

Voila, vous savez maintenant comment faire pour afficher les champs de la base de données que vous souhaitez. Je reste à votre disposition si vous souhaitez avoir d'autres renseignements. Dans le prochain tutoriel, vous apprendrez à optimiser un peu les codes ci-dessus ainsi que la mise en relation avec les catégories liées. Nous verrons également comment insérer un début de design. Cependant, pour cette intégration, il me faudrait un design assez simple,Si quelqu'un en possède un, n'hésitez pas à me contacter avec mon formulaire contact.

Publier sur mon compte twitterPublier sur mon viadeoPublier sur mon deliciousPublier sur mon compte twitter

Ajoute ton commentaire

Pseudo : *
E-Mail : *
MSN :
Site internet :
Blog :
Note : *
Commentaire : *
Ne pas compléter :

Le 24-06-2011 à 12:12:41 par tuto php

avatarMerci pour ce tutoriel, c’est maintenant plus clair. Où est-ce qu’on peut voir la suite de ce tutoriel ?

Note :  notenotenotenotenote
Le 23-05-2011 à 15:09:39 par leknoppix

avatarLes tutoriels sur symfony et sur cake sont arrêté pour plusieurs raisons: + Manque de temps, je suis rentré dans la vie active et il est très difficile de réaliser des tutoriels. + Pas de grand demandeur, tu es le seul a demandé la suite, je reprendrais peut-être la suite s'il y a un peu plus de demande. + Lancement d'une nouvelle série de tutoriel plus accès sur les cms. Si tu veux continué ton apprentissage sur cakephp, je te conseillerais d'aller voir le site http://grafikart.fr/ Bonne journée.

Note :  notenotenotenotenote
Le 23-05-2011 à 15:03:55 par dépannage informatique

avatarJ'ai bien compris ton tuto!!! Quand ce nouveau tuto? Je l'attends!!!

Note :  notenotenotenotenote
1 - 2

© 2007-2024