Nuage de tags en PHP
Posté par jbj le 10 oct 2007 dans PHP • 8 commentairesPopularisé par la mode web 2.0, les nuages de tags, ou tagclouds sont désormais légions sur les blogs et les sites communautaires.
Voyons ensemble la création d'un nuage de tags basique avec PHP et MySQL.
Création des tables
La première chose à faire est de créer les tables de notre application. Nous en avons besoin de 3: Une pour les articles, une pour les tags, et une qui fera la relation entre articles et tags.
Table tags:
CREATE TABLE `tags` ( `id` int(11) NOT NULL auto_increment, `label` varchar(100) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;
Table articles
CREATE TABLE `articles` ( `id` int(11) NOT NULL auto_increment, `label` text NOT NULL, `url` text NOT NULL, PRIMARY KEY (`id`)
Table relation:
CREATE TABLE `relation` ( `article_id` int(11) NOT NULL default '0', `tag_id` int(11) NOT NULL default '0' ) ENGINE=MyISAM DEFAULT CHARSET=latin1; ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=18 ;
Nous allons également rajouter un peu de contenu dans ces trois tables. Tout d'abord, quelques articles:
INSERT INTO `articles` VALUES (1, 'Créer des executables Python avec pyInstaller', 'http://www.jbjweb.com/python/index.php?2007/02/15/13-pyinstaller'); INSERT INTO `articles` VALUES (2, 'A Beginner''s Python Tutorial', 'http://www.sthurlow.com/python/'); INSERT INTO `articles` VALUES (3, 'Texte façon Web 2.0', 'http://www.webinventif.fr/wiki/tutoriels/design/texte_facon_web_2.0', '2007-06-14 22:19:50');
Ensuite, quelques tags...
INSERT INTO `tags` VALUES (1, 'python'); INSERT INTO `tags` VALUES (2, 'design'); INSERT INTO `tags` VALUES (3, 'open-source');
Et pour finir, nous allons joindre les tags aux articles qui leur correspondent:
INSERT INTO `relation` VALUES (1, 1); INSERT INTO `relation` VALUES (2, 1); INSERT INTO `relation` VALUES (1, 3); INSERT INTO `relation` VALUES (3, 2);
Les fonctions PHP:
Cette première fonction sert à récupérer tous les articles en rapport avec un tag donné en paramètre. Notez que dans le cas d'une appli réelle, il serait préférable et surtout plus propre de retourner les résultats dans un array plutot que de les écrires directement via echo...
function getLinksByTag($tag)
{
//Je suppose ici que vous disposez d'une connection valide à MySQL
addslashes($tag);
$sql = "SELECT articles.* FROM articles articles, tags tags, relation relation WHERE tags.label = '$tag' and tags.id = relation.tag_id and relation.article_id = articles.id";
$req = mysql_query($sql);
while ($data = mysql_fetch_array($req))
{
echo '<a href="'.$data['url'].'">'.$data['label'].'</a>';
}
}
Cette seconde fonction est l'inverse de la première: On lui passe l'id d'un article en paramètre et elle ira chercher dans la base de données tous les tags en relation avec cet article.
function getTagsById($article_id){
//Je suppose ici que vous disposez d'une connection valide à MySQL
$req = mysql_query("SELECT tags.label FROM articles, tags, relation WHERE articles.id = $article_id AND articles.id = relation.article_id AND tags.id = relation.tag_id") or die();
while ($data = mysql_fetch_array($req))
{
echo '<a href="'.$data['url'].'">'.$data['label'].'</a> ';
}
}
La dernière fonction, getTagCloud, prends comme paramètre le nombre maximum de tags que vous souhaitez afficher dans le nuage de tags. Dans le cas de cet exemple, cliquer sur un lien du nuage de tags renvoie vers une page qui appliquera la fonction getLinksByTag à la variable tag passée en GET.
function getTagCloud($nb_tags)
{
//Je suppose ici que vous disposez d'une connection valide à MySQL
$req = mysql_query("SELECT * FROM tags LIMIT ".$nb_tags);
while ($data = mysql_fetch_array($req))
{
echo '<a href="showarticles.php?tag='.$data['label'].'">'.$data['label'].'</a> ';
}
}
Autres articles dans la catégorie PHP
- Traiter les emails avec php
- Faire du email piping avec PHP et CPanel
- Présentation de l’interface Iterator de PHP
- Manipulation de répertoires en php avec la SPL
- Géolocalisation IP avec PHP et WordPress
- script php de sauvegarde mysql
- Monitoring de site avec alerte mail et SMS
- Communiquer entre serveurs par requêtes xml
- Une classe php complète pour la détection du navigateur
- 6 fonctions PHP indispensables








Nuage de tags en PHP…
Popularis par la mode web 2.0, les nuages de tags, ou tagclouds sont dsormais lgions sur les blogs et les sites communautaires.
Voyons ensemble la cration dun nuage de tags basique avec PHP et MySQL….
Trés explicite ton cours.
Merci beaucoup je suis entraint de monter un site et javais quelques problemes avec les tags
mais maintenant je croix que s’en est fini.
Maerci beaucoup et du courage continu dans cette lancée.
Merci à toi Naji, content que ce tuto t’ai été utile
Bonjour,
Connaissez vous un widget php comme celui de wordpress, avec l’animation flash ?
Amicalement, Philippe
[...] Â http://www.lyxia.org/blog/tutoriaux/nuage-de-tags-en-php-77 [...]
[...] Continued here: Nuage de tags en PHP [...]
Bonjour ,et merci,
Bon script pour apprendre
Remarque , est ce on peut enlever la table relation pour mettre directement une relation dans la table article
le soucis c est que j ai du mal a reperé les groupes dans la table relation
idee de developpement ??
MERCI ludo
Salut, j’ai voulus tester t’es code pour pouvoir les utiliser a ma guise par la suite mais une fois les function ajoutez dans mon fichier function.php & les table créer j’insere sur une page test la 1er function par exemple :
Néanmoins sur ma page test.php ou j’appel la fonction rien ne s’affiche, ni les tags, ni l’article.
Donc comment faire ?