Salut à tous !
Aujourd’hui on vas faire un petit truc en php, qui vas vous permettre de rendre plus « pros » vos système de news / blog etc..
En effet, je ne sais pas vous, mais avoir l’article en entier sur une page d’accueil, ça manque de « classe ».
Je vais donc vous apprendre à raccourcir vos billets en extraits et y rajouter un lien.
Pour ça, on part d’une base de données qui contient deux billets et une page show.php qui affiche l’article en fonction de l’id passé en paramètre du type ?id=:id .
Je vous mets cela au téléchargement :

Téléchargez extraits.zip
Lorsque vous dézippez ce fichier, vous pouvez y voir deux fichiers : show.php, qui contient l’affichage de l’article en entier et sql.txt, qui lui contient la base de données. Pour l’utiliser, allez sur http://localhost/phpmyadmin et créez une base que vous nommerez tutoextrait.
Ensuite, allez dans l’onglet « importer » et rensignez l’adresse du fichier sql.txt.
Si vous regardez la structure, vous apercevrez un champ « extrait ». Je vous montrerai a la fin comment on va le gérer.
Nous voilà donc fin prêt à aborder pleinement ce tuto !
Donc, tout d’abord, on créer un fichier index.php, dans ce tuto on oubliera le html pour se concentrer sur le php.
Ouvrez donc les balises php (<?php ?> )
et nous allons nous connecter à la base de données en utilisant PDO :
try{
$pdo = new PDO("mysql:host=localhost;dbname=tutoextrait", "root", "" ) ;
$query = "SELECT id, contenu, titre FROM billets"; // Requète
$exec = $pdo->query($query);
while($fetch = $exec->fetch()){
//Affichage des articles
echo "<h1>".$fetch['titre']."</h1>";
echo "<p>".$fetch['contenu']."</p>";
}
}catch(Exception $e){
die("erreur SQL :".$e->getMessage());
}
Voilà, nous sommes donc connectés à la base de données, et nous avons affiché nos articles.
Comme vous pouvez le voir, nous voyons entièrement le contenu de nos articles.
Nous allons maintenant nous intéresser à la façon dont nous allons procéder :
- Tout les, disons 50 caractères pour l’exemple, nous devons couper l’article, rajouter 3 petits points et mettre un lien « lire la suite ».
- Nous opérerons sur la variable $exec['contenu'] car elle contient le contenu du billet
- Il existe sûrement une fonction déjà prête de PHP pour faire ce que l’on veut.
Donc, en effet, il existe une fonction PHP, nous pas qui fait des extraits, mais qui coupe des chaines de caractères (ce qui revient au même, je vous l’avoue ^^) : substr
On voit donc que cette fonction s’utilise avec 3 paramètre dans notre cas : « string » => la chaine de caractère à couper; « start » => Le rang de départ; « end » => Où stoppe le « coupage » de la chaîne.
Je vous laisse donc imaginer ce que ça pourrait donner en php…
[...]
Correction !
<?php
//Connexion à la bdd plus haut
echo "<h1>".$fetch['titre']."</h1>";
$contenu = substr($fetch['contenu'], 0, 50);
echo "<p>".$contenu."</p>";
?>
Voilà ! On a rempli notre rôle « principal » : Créer un extrait à partir d’un billet de blog.
Maintenant, on vas rajouter quelques petites choses : On vas commencer par les 3 petits points après l’extrait, pour dire qu’il y a une suite.
Après la variable contenu, on vas incrémenter cette variable :
<?php
$contenu = substr($fetch['contenu'], 0, 50);
$contenu .= " ...";
?>
On vient donc d’incrémenter cette variable de 3 petits points, pour faire comprendre au lecteur qu’il y a une suite à l’article.
Maintenant, nous allons rajouter un lien « lire la suite ». Je vous rappelle juste la structure du lien pour voir le billet en entier : [votre url]/show.php?id=:id
Maintenant, c’est parti, voilà comment faire, toujours grâce à l’incrémentation :
<?php
//Code plus haut (connexion + deux variables contenu)
$contenu .= '<a href="show.php?id='.$fetch['id'].'" > Lire la suite </a>';
?>
Voilà, on a rajouté un lien fonctionnel sur le lire la suite .
On a donc bien fini notre objectif principal : créer un extrait d’un billet a partir de ce billet.
Maintenant, on vas passer au premier « bonus » : le champ extrait se trouvant en base de données, il sert à pouvoir définir un extrait personnalisé, exemple : vous présentez un artiste, vous pouvez créer un extrait perso du style « Aujourd’hui, présentation de xxxx, un artiste … » a la place d’avoir un extrait un peu « formaté » du style : « Salut à tous ! deuxième article en période de vacances ! Aujourd’hui, je vais vous présenter xxxx, un artiste … ». Cela fait un peu plus « pro » ! C’est parti !
Tout d’abord, on vas modifier la variable $query de notre script index.php, on doit rajouter le champ « extrait » à aller chercher :
<?php
$query = "SELECT id, contenu, titre, extrait FROM billets";
?>
Ensuite, on vas se retrouver dans la partie affichage des extraits de billets, on vas tester si le champ extrait est vide (NULL) avec une simple condition :
<?php
if($fetch['extrait'] == NULL){
$contenu = substr($fetch['contenu'], 0, 50);
$contenu .= " ...";
$contenu .= '<a href="show.php?id='.$fetch['id'].'" > Lire la suite </a>';
echo "<p>".$contenu."</p>";
}else{
echo "<p>".$fetch['extrait']."</p>";
}
?>
Voilà, c’est fait, tester, le post n°1 affichera l’extrait spécifié dans la base de données alors que le billet n°2 affichera un extrait « auto-généré ».
Maintenant, deuxième bonus : je vais vous passer une classe, que j’ai faite permettant de générer automatiquement tout ce que l’on a fait depuis le début, je vous explique comment l’utiliser :
@param requete = requete à effectuer
@param from (facultatif) = Numéro du caractère a partir du quel on coupe la chaine
@param end (facultatif) = Numéro au bout du quel on stoppe l’affichage de la chaine
@param from-end = Defaut : 0-120
@param fields : array : 0: id, 1: titre, 2:extrait, 3:contenu,
static function generate($requete, $fields = array(), $from = 0, $end = 120){
Voilà, c’est expliqué, ce sera sur la classe, sur tout ! Si vous avez des questions : commentaires !
A+ tout le monde 