Appel à du PHP depuis les templates Dotclear

Le principal frein au passage de ce blog à Dotclear 2 était qu'il devait s'intégrer dans la « charte graphique » du site, laquelle est générée par du PHP. J'avais donc hacké violemment (et gorettement) les templates PHP de Dotclear 1 pour faire les bons appels. Dotclear 2 faisant appel à un moteur de templates « type XML », j'avais quelques appréhensions...

En réalité, il est très facile d'intégrer des appels PHP dans un thème Dotclear 2, il faut juste le faire de façon un peu détournée, mais finalement assez propre. En gros, je devais appeler une fonction en début de page, et une en fin de page : ces fonctions créent le gabarit standard du site. Et bien j'ai décidé de créer une balise <tpl:CJPage>, dans laquelle j'englobe toute la page. Rien de plus facile, il suffit de déclarer cette balise dans le fichier _public.php du thème et de l'implémenter en PHP. Tout est expliqué chez Franck Paul.

Je voulais également afficher des messages au-dessus des billets correspondant à certains critères (réclame pour la mémento LaTeX, lien vers la page des PIC) :

  • pour un affichage conditionnel basé sur la catégorie du billet, cela a pu se faire très simplement avec <tpl:EntryIf category="..."> ;
  • pour un affichage conditionnel en fonction du titre du billet, j'ai dû écrire un peu de PHP, mais rien de bien méchant.

Personnalisation des textes générés par Dotclear

Si certains des textes générés par Dotclear ne vous plaisent pas, il est possible de redéfinir les chaînes de localisation directement depuis _public.php, par exemple :

$GLOBALS['__l10n']['previous entries'] = 'billets plus anciens';

Migration des URL

Il existe un plugin dc1redirect, mais j'ai préféré faire le kéké avec le mod_rewrite d'Apache. C'est réglé en quelques lignes : les URL des billets sont préservées, seules les URL des catégories et des mois deviennent invalides, mais cela m'importe peu. Plus précisément, comme toutes les URL ont une nouvelle forme, il y a une redirection 301 depuis l'ancienne forme.