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.