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 :
Je crois qu'il l faudrait modifier le tip en suivant le conseil de 2-high ci-dessus ;)