DotClear 2 et les templates (8)

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 …

Ajouter un commentaire

Les champs suivis d'un * sont obligatoires

Les commentaires peuvent être formatés en utilisant la syntaxe Markdown Extra.

Ajouter un rétrolien

URL de rétrolien : https://open-time.net/trackback/3119

Haut de page