Tout d'abord, nous avons besoin d'ajouter un filtre à la balise de template <tpl:Entries> qui permettra de ne pas récupérer le lien vers le billet courant dans la liste des billets. Cela va se faire en ajoutant ce bout de code dans le fichier _public.php du thème utilisé :
<?php
$core->addBehavior('templateBeforeBlock',array('behaviorsExcludeCurrentPost','templateBeforeBlock'));
class behaviorsExcludeCurrentPost
{
public static function templateBeforeBlock($core,$b,$attr)
{
if ($b == 'Entries' && isset($attr['exclude_current']) && $attr['exclude_current'] == 1)
{
return
"<?php\n".
'$params["sql"] .= "AND P.post_url != \'".$_ctx->posts->post_url."\' ";'."\n".
"?>\n";
}
}
}
?>
Note : attention, si vous avez déjà un fichier _public.php dans votre thème, ne copiez ni la première ni la dernière ligne de ce code. Si vous n'en avez pas, créez-le à la racine du répertoire du thème et collez-y tout le code ci-dessus.
Ensuite, il faut aller dans le fichier post.html du thème utilisé, et y ajouter, là où vous voulez afficher la liste, la boucle suivante :
<div id="cat-related">
<h3>Dans cette catégorie</h3>
<ul>
<tpl:Entries category="#self" no_content="1" no_context="1" lastn="5" exclude_current="1">
<li><a href="{{tpl:EntryURL}}">{{tpl:EntryTitle encode_html="1"}}</a></li>
</tpl:Entries>
</ul>
</div>
Les habitués auront remarqué l'apparition d'un nouveau paramètre à la balise <tpl:Entries>, il s'agit de exclude_current="1" qui permet d'exclure le billet courant de la boucle.


Commentaires
Bonjour,
En passant à la version 2.2, ce bout de code m'a entrainé une erreur 'Notice: Undefined variable: params in ...'. J'ai résolu le problème en enlevant le . de concatenation devant = "AND ...".
Si ca peut servir à quelqu'un ^_^
Pour le cas où il n'y a qu'un billet dans la catégorie :
<tpl:Entries category="#self" no_content="1" no_context="1" lastn="5" exclude_current="1"> <tpl:EntriesHeader> <div id="cat-related"> <h2>Sur le même thème</h2> <ul> </tpl:EntriesHeader> <li><a href="{{tpl:EntryURL}}">{{tpl:EntryTitle encode_html="1"}}</a></li> <tpl:EntriesFooter> </ul> </div> </tpl:EntriesFooter> </tpl:Entries>Je crois qu'il l faudrait modifier le tip en suivant le conseil de 2-high ci-dessus ;)