Si vous voulez plus d'information sur ce fichier _public.php
qui accompagne parfois les thèmes, alors continuez la lecture de ce billet, sinon rendez-vous au prochain pour la suite de l'exercice.
Voilà, pour l'instant, à quoi ressemble notre _public.php
:
<?php class dcFallSeason { static public function FlagFirstPage($attr) { if (isset($attr['true'])) { $flag = 'true'; } else { $flag = 'false'; } return '<?php $dcFallSeasonFlagFirstPage = '.$flag.'; ?>'; } static public function FlagFirstPageIf($attr,$content) { $if = ''; if (isset($attr['true'])) { $sign = (boolean) $attr['true'] ? '' : '!'; $if = $sign.'$dcFallSeasonFlagFirstPage'; } if ($if != '') { return '<?php if('.$if.') : ?>'.$content.'<?php endif; ?>'; } else { return $content; } } } // Add Flag management to the template scheme $core->tpl->addValue('FlagFirstPage', array('dcFallSeason','FlagFirstPage')); $core->tpl->addBlock('FlagFirstPageIf', array('dcFallSeason','FlagFirstPageIf')); ?>
Détaillons-le un peu. Première et dernière lignes classique dans un fichier PHP, <?php
et ?>
. À l'intérieur de ceci nous y trouvons deux parties. La première définit une classe dcFallSeason
, un nom qui reprend le nom du thème précédé de dc
. Cette classe sert à définir les fonctions de traitement des nouvelles balises qui seront utilisées au sein du thème. La deuxième partie permet de déclarer à DotClear 2 les nouvelles balises template et les fonctions de traitement qui en dépendent.
Le plus simple d'abord, la déclaration des nouvelles balises. Je rappelle qu'il y en a deux, une de type simple {{tpl:FlagFirstPage}}
et une de type bloc <tpl:FlagFirstPageIf>
, respectivement déclarées de la manière suivante :
$core->tpl->addValue('FlagFirstPage', array('dcFallSeason','FlagFirstPage')); $core->tpl->addBlock('FlagFirstPageIf', array('dcFallSeason','FlagFirstPageIf'));
Le premier paramètre définit le nom utilisé dans la balise — ce qui suit le <tpl:
, le deuxième, sous forme de tableau (array), définit le nom de la classe (dcFallSeason
dans notre cas) et le nom de la fonction associée. addValue()
est utilisée pour une balise simple, addBlock()
pour une balise de type bloc. De cette manière, lorsque DotClear 2 rencontrera une de nos balises dans un fichier du thème, il saura quelle est la fonction de traitement qui doit être utilisée.
Voyons maintenant les fonctions de traitement. La première, FlagFirstPage()
reçoit un paramètre, sous forme de tableau, contenant les attributs éventuels et leurs valeurs utilisés dans la balise. La deuxième, FlagFirstPageIf()
reçoit en plus un paramètre contenant le contenu de ce qui est encadré par la balise (de type bloc). Les deux fonctions doivent retourner le code PHP (ou HTML) correspondant à la balise.
Je vais détailler le code de la première, la seconde devrait être comprise assez facilement. Voilà le code :
1. static public function FlagFirstPage($attr) 2. { 3. if (isset($attr['true'])) { 4. $flag = 'true'; 5. } else { 6. $flag = 'false'; 7. } 8. return '<?php $dcFallSeasonFlagFirstPage = '.$flag.'; ?>'; 9. }
Ligne 1, il s'agit de la déclaration de la fonction et des paramètres attendus (un seul dans ce cas). Les lignes 2 et 9 délimitent le code de la fonction. Ligne 3, je contrôle qu'un attribut intitulé true
a ou n'a pas été spécifié dans la balise (ex {{tpl:FlagFirstPage}}
ou <tpl:FlagFirstPage true="1">
). Ligne 4, interprétée si l'attribut a été utilisé, permet de positionner la valeur 'true'
à une variable texte ($flag
). La ligne 6, interprétée dans le cas contraire, permet de positionner la valeur 'false'
à cette même variable. La ligne 8, enfin, retourne le texte par lequel sera remplacée la balise.
Exemple :
Si j'utilise la balise {{tpl:FlagFirstPage}}
, la fonction va alors retourner ceci <?php $dcFallSeasonFlagFirstPage = false; ?>
, ce qui revient à déclarer et à initialiser une variable avec la valeur false (faux).
Si j'utilise la balise {{tpl:FlagFirstPage true="1"}}
, la fonction va retourner cela <?php $dcFallSeasonFlagFirstPage = true; ?>
, ce qui revient à déclarer et à initialiser une variable avec la valeur true (vrai).
Cette variable, $dcFallSeasonFlagFirstPage
, positionnée à true ou false, sera ensuite testée avec la balise <tpl:FlagFirstPageIf>
dans le thème, permettant de conditionner l'apparition d'un bloc en fonction du résultat, l'affichage du bloc d'intro dans notre cas.
Vous devriez maintenant comprendre un peu mieux comment s'opère la phase de traitement des balises template de DotClear 2.
À suivre …
1 De hiramash -
Bonjour,
Cette affaire de "templates" est intéressante. J'utilise un multiblog prêt à l'emploi "B2evolution" fourni par mon hébergeur. Quand je me logge sur le système, je peux gérer les apparences, et il y a un onglet pour accéder à différents fichiers "templates". D'après mon hébergeur, nous allons bientôt passer à PHP5. Je ne suis pas programmeur, pourriez-vous m'indiquer où est-ce qu'on peut trouver et intégrer d'autres thèmes que ceux proposés par défaut ?
En vous remerciant par avance,
2 De Franck -
Tout dépend si vous avez accès via FTP à votre espace d'hébergement, auquel cas il suffit de suivre les instructions de la documentation de Dotclear 2.
3 De aiguebrun photo -
"Le plus simple d'abord, la déclaration des nouvelles balises. Je rappelle qu'il y en a deux, une de type simple <tpl:FlagFirstPage> et une de type bloc <tpl:FlagFirstPageIf>, respectivement déclarées de la manière suivante :" Juste pour te signaler une petite erreur sur la balise de type simple qui serait plutôt
Sinon, merci pour tes articles qui ont le mérite d'être clairs.4 De aiguebrun photo -
Oui, bon le nettoyeur de code a changé mes accolades en << >> !
5 De Franck -
Oui c'est la syntaxe wiki qui a joué un tour ;-)
Merci pour le signalement !