Nuage de tags en PHP
Posté par jbj le 10 oct 2007 dans PHP • Un commentairePopularisé 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> ‘;
}
}

















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….