Maintenant que nous avons vu l'essentiel de ce qu'il faut savoir à propos des templates de DotClear 2 nous allons faire un petit exercice pratique. Nous y verrons comment personnaliser un peu notre thème et au passage comment développer quelques petites fonctions très basiques en PHP.
Prêts ? Alors voilà l'énoncé de l'exercice :
J'ai prévu d'afficher un bloc particulier sur la page d'accueil. Ce bloc contiendra le dernier billet publié d'une catégorie précise ou à défaut, un texte fixe. Cette catégorie s'appellera Flash et ne servira qu'à gérer ce genre de petits messages et par conséquent ses billets ne devront pas apparaitre dans le flux normal[1].
Traduit en pseudo langage informatique cela donnera ceci :
si premiere_page alors si billet_flash existe alors afficher billet_flash sinon afficher un texte fixe fin_si fin_si afficher billets_non_flash
Par où commencer ? Ce traitement doit s'appliquer uniquement sur la page d'accueil donc on fera les modifications sur le fichier home.html
du thème[2].
Dans ce fichier on trouve normalement un bloc template de cette forme :
<div id="main"> <div id="content"> <tpl:Entries> … </tpl:Entries> </div> </div>
Première chose à faire, surtout la plus aisée, exclure la catégorie Flash de la liste des billets affichés normalement. Pour cela il suffit de rajouter l'attribut category="!Flash"
dans la balise <tpl:Entries>
. Voilà le code modifié :
<div id="main"> <div id="content"> <tpl:Entries category="!Flash"> … </tpl:Entries> </div> </div>
Vous aurez peut-être remarqué, dans le fichier home.html
, un autre endroit où apparait la balise <tpl:Entries no_content="1">
, dans la section <head>
. Ici aussi il faut rajouter l'attribut category="!Flash"
ce qui donnera :
<tpl:Entries category="!Flash" no_content="1">
Dernière précision, le !
utilisé devant le nom de la catégorie sert à exclure les billets de cette dernière de la liste de ceux qui seront traités (affichés)[3].
Nous voilà donc avec une page d'accueil dont les billets de la catégorie Flash ne seront pas affichés. Prochaine étape, le bloc d'introduction sur la première page. Nous verrons dans le prochain billet comment déterminer si l'on est sur la première page ou pas et le problème — facile à résoudre — que cela peut poser pour la suite de notre exercice.
Notes
[1] Par contre j'ai choisi de laisser l'accès à tous ces billets particuliers dans la liste des catégories ou dans les archives.
[2] Si votre thème ne possède pas un tel fichier, il suffit de faire une copie de celui qui est présent dans le répertoire du thème par défaut (répertoire default
) et de le copier dans le répertoire de votre thème.
[3] Vous pouvez si nécessaire mettre une liste de catégorie dont les noms seront séparés par une virgule. Tous les billets de ces catégories seront alors ignorés. Bien sûr la réciproque est vraie. En ne mettant pas le !
devant la ou les catégories, nous ne récupérerons que les billets de cette ou de ces catégories.
1 De mirovinben -
Toujours aussi intéressant. Je suis intrigué par le bloc à modifier dans le <head>. Sans doute aurons-nous une explication de son rôle dans les prochains épisodes.
Merci encore...
2 De Franck -
Je peux l'indiquer ici.
La section
<head>
contient un certain nombre de liens vers d'autres ressources, comme le lien vers le billet précédent, le suivant, etc (rel="previous"
,rel="next"
, …). C'est la raison de la présence de ce bloc agrémenté de l'attributno_content="1"
qui permet de ne pas récupérer le contenu des billets mais uniquement leurs informations.3 De Guillaume -
Expliqué aussi bien, comment ne pas comprendre. Tes petits billets sur les templates me sont indispensable alors que je viens de passer sous Dotclear 2 beta 6
Merci encore
4 De mirovinben -
Pardon pour ma lenteur d'esprit, mais quel risque prend-t-on de ne pas modifier le "<tpl:Entries no_content="1">" dans le <head> ?
J'ai mis en place depuis quelque temps déjà sur mon blog ce mécanisme permettant d'afficher d'abord une catégorie spéciale (appelée "chapo" chez moi) puis les autres et n'ai rien constaté d'anormal côté navigation.
Peut-être parce que je l'utilise avec une grande parcimonie (un seul billet et peu fréquemment). D'autant que souvent le billet mis en exergue change de catégorie ensuite pour rentrer dans le rang ou est carrément mis hors ligne.
5 De Franck -
Le risque est de voir apparaitre dans la liste des liens de l'entête, un lien vers un billet qui n'est normalement pas affiché dans le flux normal. Maintenant on peut choisir de conserver tout de même ce mécanisme, ça ne cassera rien.
Il me semble de toute façon que cette liste de liens dans l'entête ne serve pas énormément mais ça demande confirmation.
6 De Nicolas -
A ce rythme, les fonctions de traitement risquent de n'avoir plus beaucoup de secrets pour moi! Les explications sont vraiment claires! Ce système "conditionnel" est vraiment intéressant et assez compréhensible pour les néophytes. Je me demande jusqu'où on peut bien le pousser!
7 De Franck -
Le rythme, plutôt lent, est délibéré car je préfère prendre le temps de répondre à toutes les questions avant de continuer.
On peut le "pousser" assez loin, et si nécessaire, développer soi-même ce qui pourrait manquer ! D'ailleurs c'est au programme très prochainement. J'essaierai de faire en sorte que ceux qui n'ont jamais codé en PHP y comprennent quelque chose.
8 De Moe -
Ton Pseudo-code.
peut aussi être appelé9 De Franck -
Tout à fait Moe, merci pour la précision.
10 De yoann007 -
Ce système est vraiment excellent, je suis en train de m'en servir pour développer moi-même un blog assez poussé sans plonger dans le PHP.
Il y a juste quelque chose qui m'intrigue. Lorsqu'on utilise plusieurs <tpl:Entries> sur une page (par exemple pour un système de billet événementiel d'une certaine catégorie, dans une colonne), comment peut-on faire pour que cet affichage ne soit pas perturbé quelque soit la page sur laquelle elle est affichée ?
Je m'explique : sur tag.html par exemple, mon <tpl:Entries> disposé sur le côté semble influencé par le critère "sélectif" du tag choisi, ce qui fait qu'il ne fonctionne pas comme je le voudrais. Comment faire pour faire comprendre à Dotclear qu'il ne doit pas considérer cette/ces entrée(s) comme la liste d'entrées principales sur des pages comme tag.html ? Y'a-t-il un attribut pour cela ? (j'espère avoir été clair dans mes explications)
11 De Franck -
Le problème vient du contexte. En effet sur une page d'affichage des billets liés à un tag, celui-ci est limité aux billets, y compris en dehors de la balise
<tplEntries>…</tplEntries>
.Je suis en train de regarder pour voir s'il n'y a pas une astuce qui permettrait de s'affranchir de cette limitation…
Stay tuned ;-)
12 De yoann007 -
Je reviens -gentiment- à la charge :)
Je sais qu'il s'agit d'un usage assez atypique de Dotclear 2, mais étant donné que le système de templates est quand même conçu pour pouvoir créer soi-même ce genre de personnalisations, il devrait bien y avoir un moyen d'utiliser un simple argument qui permette de dégager un
<tplEntries></tplEntries>
de la contrainte liée à la sélectivité de la page affichée, non ?(Ou alors, oserai-je ? Si ce n'est pas possible en l'état, ce serait à envisager, non ? ;) )
Personnellement, si ce n'est pas possible, je recourrai à des appels directs dans la base de données donc ce n'est pas un si gros souci, mais je me dis que ça ne peut qu'améliorer Dotclear ou du moins aider ceux qui sont dans le même cas que moi.
13 De Franck -
J'avais (un peu) oublié ce problème ces jours derniers, mais j'ai l'excuse d'avoir eu un truc sur le feu qui demandait à sortir ;-)
Je vais relancer les sorciers pour savoir où on en est exactement car ce problème a déjà été évoqué et je ne sais pas quelle décision a été prise finalement, à savoir si le contexte est prioritaire sur les attributs fournis dans la balise ou pas.
14 De Adrien -
Merci Franck pour toutes ces pages très claires concarnant les templates sous dotclear2. Débutant dans le domaine, ça faisait un moment que je cherchais comment faire pour n'afficher les billets que d'une catégorie à l'accueil du blog... c'est maintenant chose faite ! -;)
Les pages de "Dotclear 2 et les templates" font désormais partie mes favoris !
Merci et bonne continuation