Le marqueur IfBlogID permet d'inclure du code html dans les fichiers template d'un thème commun à plusieurs blogs uniquement pour (ou sauf pour) un ou plusieurs blogs nommément désignés. Comme, par exemple, l'insertion d'un widget en dehors de la sidebar.
Ce billet vous indique comment l'ajouter à votre thème, si vous y êtes autorisé.
Préambule
Il est conseillé de lire ou relire ce billet avant de commencer.
Le marqueur IfBlogID
Pour pouvoir en disposer dans votre thème, il vous faut copier/coller à la fin du fichier _public.php ceci :
$core->tpl->addBlock('IfBlogID',array('tplMrvb03','IfBlogID')); class tplMrvb03 { public static function IfBlogID($attr,$content) { $is = isset($attr['is']) ? trim($attr['is']) : ''; $no = isset($attr['isnot']) ? trim($attr['isnot']) : ''; if (strlen($is) > 0) { $p = '$blogs = explode(\',\',\''.$is.'\'); $blogs = str_replace(\' \',\'\',$blogs); if (in_array($core->blog->id, $blogs)) {'; return '<?php '.$p.' ?>'. $content. '<?php } ?>'; } else { if (strlen($no) > 0) { $p = '$blogs = explode(\',\',\''.$no.'\'); $blogs = str_replace(\' \',\'\',$blogs); if (!(in_array($core->blog->id, $blogs))) {'; return '<?php '.$p.' ?>'. $content. '<?php } ?>'; } else { return $content; } } } }
Il ne reste plus qu'à enregistrer le fichier. Vous venez de créer une nouvelle classe tplMrvb03 que vous avez enrichie du marqueur IfBlogID.
Comment l'utiliser
Pour ajouter du code html dans un fichier template du thème, il vous suffit d'insérer à l'endroit que vous souhaitez...
<tpl:IfBlogID is="x,y,z"> (...) </tpl:IfBlogID>
ou
<tpl:IfBlogID isnot="x,y,z"> (...) </tpl:IfBlogID>
"is" et "isnot" sont des chaînes de caractères pouvant contenir une liste d'ID de blogs séparés par des virgules.
- Si l'ID du blog est présent dans "is", affiche ce qui est placé entre <tpl:IfBlogID> et </tpl:IfBlogID>.
- Si "is" est absent ou vide et si l'ID du blog est présent dans "isnot", n'affiche pas ce qui est placé entre <tpl:IfBlogID> et </tpl:IfBlogID>.
- Si "is" et "isnot" sont absents ou vides, affiche ce qui est placé entre <tpl:IfBlogID> et </tpl:IfBlogID>.
Il est impossible (et illogique) d'avoir dans le même <tpl:IfBlogID> un paramètre "is" et un paramètre "isnot". "is" est prioritaire sur "isnot". Par contre on peut tout à fait utiliser successivement deux blocs selon le principe "SI", "SINON" (voir exemple n°3).
Exemples
- Afficher "Blog principal" uniquement si le blog a pour ID "default" :
<tpl:IfBlogID is="default"><p>Blog principal</p></tpl:IfBlogID>
- Afficher "Autre blog" uniquement si le blog n'a pas pour ID "default" :
<tpl:IfBlogID isnot="default"><p>Autre blog</p></tpl:IfBlogID>
- Afficher "Oui" si le blog a pour ID "default" et "Non" pour les autres blogs :
<tpl:IfBlogID is="default"><p>Oui</p></tpl:IfBlogID> <tpl:IfBlogID isnot="default"><p>Non</p></tpl:IfBlogID>
Remarque
Ce marqueur fait partie d'une série de marqueurs de template que j'ai écrits ex-nihilo ou inspiré par d'autres développeurs. Je souhaite faire en sorte que chaque marqueur, chaque billet qui le présente soit autonome. Comprendre : pas besoin d'installer les autres marqueurs pour que ça fonctionne. Pour ce faire et pour simplifier le copier/coller, chaque marqueur se voit déclaré dans sa propre classe tplMrvb01, tplMrvb02, etc...
Mise à jour du 31/01/2015 :
il n'est pas/plus nécessaire d'avoir ?> en dernière ligne du fichier _public.php.
Mise à jour du 20/03/2016 :
Ce marqueur de template est également présent dans le fichier _public.php en téléchargement ici.