Cette solution nécessite la modification du plugin twtags. Je suis partie pour cela de la version 1.0 de Steve Frécinaux à laquelle à contribué Alexandre Passant. Cette version est disponible sur le Wiki de dotcklear. Mais la modification peut être adaptée à d'autres versions. Le plugin twMetadonna doit lui aussi être installé, mais il n'est pas modifié lors de cette manipulation.
Le plugin twTags contient une fonction _recordset(). C'est cell-ci que nous allons modifier. Voici le code après modifications :
[php]
# Récupère le recordset contenant toutes les données relatives aux tags (nom, url, nombre)
function _recordset($news=false)
{
static $rec = null;
if (is_null($rec))
{
global $con, $blog;
if ($news !== false) { $news->moveStart(); $ids = array(); while ($news->fetch()) {
$ids[] = $news->f('post_id'); } $sql = 'SELECT meta_value, COUNT(*) AS cnt'
. ' FROM '. DB_PREFIX . 'post_meta M' . ' WHERE meta_key = "tag"' . ' AND post_id IN (' . implode(',',$ids) . ')' . ' GROUP BY meta_value' . ' ORDER BY cnt DESC'; } else {
$sql = 'SELECT meta_value, COUNT(*) AS cnt'
. ' FROM ' . DB_PREFIX . 'post_meta'
. ' WHERE meta_key = "tag"'
. ' GROUP BY meta_value'
. ' ORDER BY cnt DESC'
. ' LIMIT 0,100';
} $rec = $con->select($sql); if (!$rec || $rec->isEmpty()) { $recordset = false; } else { usort ($rec->arry_data, create_function('$x, $y', 'return twTags::_strcmp($x["meta_value"], $y["meta_value"]);')); $rec->moveStart(); } } return $rec; }
Il faut aussi modifier les appel à cette fo,ction et faire suivre le paramètre $news introduit.
[php]
# Affiche la liste des tags d�finis
function tagList($block = '<ul>%s</ul>', $item = '<li>%s</li>', $levels = 5, $news = false)
{
global $blog, $tag_id;
$rec = twTags::_recordset($news);
....
[php]
# Affiche le tagcloud
function tagCloud($levels = 5, $block='<ul>%s</ul>', $item='<li class="level-%2$d">%1$s</li>',$news=false)
{
twTags::tagList($block, $item, $levels, $news);
}
Reste à modifier l'appel de la fonction d'affichage du nuage, selon votre usage. Moi, j'ai mis pour garder un affichage complet d'un certains cas, et bénéficier d'un affichage réduit dans d'autres cas :
[php]
if ($mode !== 'home' && $mode !== 'post' && isset($news)) {
twTags::tagCloud( 5, '<ul>%s</ul>', '<li class="level-%2$d">%1$s</li>',$news);
} else {
twTags::tagCloud( 5, '<ul>%s</ul>', '<li class="level-%2$d">%1$s</li>');
}
Et voila, enfin presque ... le satané plugin pagination nous joue encore un sale tour, en remplacant l'objet $news, sans même garder une trace de l'objet d'origine.
Attention
les codes fournis sur ce site sont livrés sans engagement de bon fonctionnement, sans garanti de support, et sans assurance de compatibilité avec votre installation. Le visiteur qui souhaite malgré tout utiliser ce code, le fait en toute connaissance de cause et doit par lui même assumer la responsabilité pleine et entière de cette utilisation.
Les codes publiés sont libres d'utilisation.
Même si cela ne constitue pas une obligation, l'utilisateur peut mentionner l'auteur original dans le source, et communiquer ses éventuelles modifications, corrections ou améliorations du code ou du texte l'accompagnant.