Le marqueur IfMyMetaNotExist permet d’inclure du code html dans les fichiers template d’un thème si l'extension MyMeta n'est pas installée ou installée mais désactivée ou si la métadonnée indiquée en paramètre de ce marqueur n'existe pas ou n'est pas activée.
Évite certains désagréments si vous êtes en mode multi-blogs avec des fichiers template communs mais des blogs n'utilisant pas les mêmes métadonnées.
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 IfMyMetaNotExist
Pour pouvoir en disposer dans votre thème, il vous faut copier/coller à la fin du fichier _public.php ceci :
$core->tpl->addBlock('IfMyMetaNotExist',array('tplMrvb04','IfMyMetaNotExist')); class tplMrvb04 { public static function IfMyMetaNotExist($attr,$content) { $t = isset($attr['type']) ? $attr['type'] : ''; $p = '$KO = 0;'. 'if ($core->plugins->moduleExists(\'mymeta\')) {'. '$meta = $core->mymeta->getByID(\''.$t.'\');'. 'if (!isset($meta)) {$KO = 1;} else {if (!($meta->enabled)) {$KO = 1;}}'. '} else {$KO = 1;};'. 'if ($KO == 1) {'; return '<?php '.$p.' ?>'. $content. '<?php } ?>'; } }
Il ne reste plus qu’à enregistrer le fichier. Vous venez de créer une nouvelle classe tplMrvb04 que vous avez enrichie du marqueur IfMyMetaNotExist.
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:IfMyMetaNotExist type="xxx"> (...) </tpl:IfMyMetaNotExist>
Si l'extension MyMeta n'est pas activée ou si la métadonnée de type "xxx" n'existe pas (ou n'est pas activée) pour le blog qui utilise ce fichier template, le code html placé entre <tpl:IfMyMetaNotExist> et </tpl:IfMyMetaNotExist> sera pris en compte.
Exemple
Ce blog fait partie d'un multi-blogs dont les différents thèmes se partagent les mêmes fichiers template. L'extension MyMeta est installée mais chaque blog utilise ses propres métadonnées.
Pour certaines pages statiques, j'utilise l'extension "related" (Pages connexes). La plupart d'entre elles n'ont pas besoin de simuler une pagination d'autre, si ! Et comme mon système de pagination est affiché en dehors du contenu de chaque page/liste de billets, il me faut donc considérer deux types de pages connexes.
- L'une "normale" : sans gestion particulière du bas de page ni besoin de MyMeta,
- et l'autre transférant à la page incluse la gestion de ce fameux bas de page à l'aide d'une métadonnée créée à cet effet : liste de type "typePost" avec l'item "dc-related-pagination" (= page connexe avec pagination).
Sans le test IfMyMetaNotExist, des pb de mise en page seraient apparus pour les pages connexes "normales" en l'absence de la métadonnée : avec des </div> absents, une barre de menu qui se retrouve en bas de l'écran et un valideur W3C qui couine à juste titre.
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 22/03/2011 :
possibilité d'indiquer une liste d'exclusion via un nouveau paramètre : "isnot".
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.
1. par annso, le jeudi 17 février 2011 à 23h27 commentaire
Oh tiens, je trouvais justement qu'il manquait vachement d'un truc pareil ! Tu as résolu ma demande avant même que j'ai pu l'exprimer en mots, merci !!
2. par mirovinben, le vendredi 18 février 2011 à 06h41 commentaire
annso : tant mieux !... Content que cette réponse à un de mes besoins te convienne.
3. par Jean-Michel, le samedi 19 février 2011 à 18h45 commentaire
Une idée de bonus à soumettre à Bruno pour l'inclure d'office dans MyMeta ?
4. par mirovinben, le dimanche 20 février 2011 à 07h27 commentaire
Jean-Michel, j'y ai songé. C'est juste que l'intérêt de "IfMyMetaNotExist" placé dans le public.php d'un thème est principalement de pouvoir exister en dehors de l'installation (ou pas) du plugin MyMeta.
5. par Jean-Michel, le dimanche 20 février 2011 à 10h13 commentaire
Ah ok, petite subtilité (j'aurai mieux fait de tourner mon clavier 7 fois avant de parler)
Lors de la construction de WLD2, il me semble avoir découvert une utilisation non référencée dans la documentation… mais j'utilise MyMeta dans un détournement très particulier