Continuons (et terminons) notre exercice pratique dont je rappelle l'énoncé :
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].
Nous savons maintenant comment déterminer correctement si nous nous trouvons sur la première page (page d'accueil), il s'agit maintenant de faire en sorte d'afficher le dernier billet publié de la catégorie Flash, ou, s'il n'en existe aucun, d'afficher un texte fixe.
Voilà le code utilisé :
<tpl:FlagFirstPageIf true="1"> {{tpl:FlagFlashPost}} <!-- # Last published post from Flash category (if exists) --> <tpl:Entries category="Flash" lastn="1"> <h2 class="intro" id="p{{tpl:EntryID}}"> <strong>{{tpl:EntryTitle encode_html="1"}}</strong></h2> <tpl:EntryIf extended="1"><span>{{tpl:EntryExcerpt}}</span></tpl:EntryIf> <div class="post-content">{{tpl:EntryContent}}</div> {{tpl:FlagFlashPost true="1"}} </tpl:Entries> <tpl:FlagFlashPostIf true="0"> <!-- # Standard text if there is no published post from Flash category --> <h2 class="intro"><strong>{{tpl:BlogDescription}}</strong></h2> <div class="post-content"> <p>Ze best blog on ze best world of ze universe.</p> </div> </tpl:FlagFlashPostIf> </tpl:FlagFirstPageIf>
J'ai mis l'emphase sur l'utilisation de deux nouvelles balises ({{tpl:FlagFlashPost}}
et <tpl:FlagFlashPostIf>
) qui sont exactement les mêmes que celles décrites dans les deux billets précédents à ceci près qu'elles utilisent une autre variable dans le code PHP.
Ces nouvelles balises me servent à positionner un drapeau (variable à true ou à false) en fonction de la présence ou pas d'un billet publié dans la catégorie Flash, et de tester la valeur de ce drapeau ce qui me permet, plus bas, d'afficher le texte standard si nécessaire.
Il n'y a absolument rien de nouveau ici, uniquement l'utilisation de techniques déjà expliquées précédemment ou reprises dans les fichiers standards du thème defaut. Rien de plus à mettre en place pour terminer notre exercice, on peut sauvegarder le fichier _intro.html
et vérifier que tout fonctionne comme attendu.
Voilà qui conclut cette série de billets sur les templates de Dotclear 2. J'espère que cela aura permis d'éclairer quelques zones d'ombres dans ce système qui peut — qui doit même pour certains — paraitre bien compliqué au premier abord. Je parle en connaissance de cause, je suis passé par cette phase ;-)
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.
1 De mirovinben -
c'est déjà fini :( ? ;)
Merci encore...
2 De Franck -
Pour cette série, c'est déjà fini ! Il n'y a vraiment rien de plus à dire qui puisse permettre une meilleure compréhension des templates pour un usage simple.
Il y aura peut-être d'autres billets plus techniques en fonction de mes découvertes et des demandes que je recevrais, on verra. Je songe déjà à un billet sur la gestion des modes (en comparaison avec DC1).
3 De Paul -
Bonjour, Désolé, j'ai dû décrocher dans les explications... j'ai bien créé les fichiers _intro et _public et édité le fichier home dans la section theme/default de mon blog, mais je n'arrive pas au résultat escompté (voir http://clarisseandpaul.free.fr/main). J'ai dû récopier bêtement une donnée à adapter... Quelqu'un peut m'aider ?! Merci bcp par avance !!
4 De Franck -
Attention, s'il n'y a pas de fichier
home.html
dans le répertoire du thème utilisé, il faut en créer un en récupérant une copie de celui qui se trouve dans le répertoire du thème defaut.5 De Paul -
J'utilise le thème par défaut qui contient bien le fichier home.html. La petite nuance est que j'utilise dotclear 2 en version multiblog (comme décrit par l'équipe dotclear). J'ai, je pense, repris l'ensemble du code en ajoutant les lignes dans home.html et en créant _intro.html et _public.html, ces trois fichiers dans themes/default/ puisque c'est le thème que j'utilise pour l'heure. Ce qui m'étonne est que sur la page d'entrée, il affiche "
" comme du texte alors que ça devrait être interprété comme du code ?? (http://clarisseandpaul.free.fr/main)6 De Franck -
Le fichier
_public.php
contient quoi ? (attention à l'extension, c'est un fichier.php
)7 De Virata -
Bonsoir,
Petite question sur les templates dc2. Pour afficher les archives dans une liste dans la sidebar sous forme mois année comme tu l'as fait sur ton blog il faut ajouter quelque chose comme ca dans le thème :
Je souhaite ne garder que les 12 derniers mois (pour éviter d'avoir une liste trop longue) et après je met un lien vers la liste complète comme le fait dc2 en natif...
Y a t'il un moyen simple de le faire sans recoder ? Apparament on ne peut pas passer ce genre de critères directement dans la boucle ?
Merci de ton aide.
8 De Franck -
Sans coder ça va être un poil difficile car seuls les paramètres optionnels de
<tpl:Archives>
,year="yyyy"
etmonth="mm"
pourraient convenir. Ils permettent de limiter la liste à une année si le premier est indiqué ou à un mois si les deux le sont.C'est une piste mais pas une solution, désolé …
9 De Virata -
Merci Franck,
En effet je peux me contenter de cela mais le paramètre year="yyyy" ne marche pas avec <tpl:Archives>. Ou alors je m'y prends mal.
10 De Franck -
C'est une erreur de ma part. Désolé, j'avais mal interprété un des paramètres de la balise. En fait il faut spécifier type="year" et year="yyyy" pour obtenir les billets de l'année.
11 De Jean-Michel -
Bonjour Franck,
En plein préparatif de mes thèmes pour ma future installation Dotclear 2. Mes blogs sont installés en multi-blog. Je suis sur PC et mon install Dotclear 2 marche sous EasyPhp 2.
J'essaye de mettre en place ce système de "Flash" et voilà la réponse que j'obtiens :
Notice: Undefined variable: dcFallSeasonFlagFirstPage in C:\Program Files\EasyPHP 2.0b1\www\dotclear\dc27-dec2007\cache\cbtpl\8d\f7\8df71704a2e0e67f6382611ccce2073f.php on line 1
C'est grave, docteur ?
12 De Franck -
Est-ce que la balise
{{tpl:FlagFirstPage}}
est en place ?13 De Jean-Michel -
J'ai essayé de suivre ce qui est décrit mais où aurais-je dû déclarer la balise
{{tpl:FlagFirstPage}}
?J'ai trouvé une autre solution aussi c'est d'insérer
Ce qui me permet un système de news sur n'importe quel page de ce site. Mais je suis quand même curieux de l'endroit où je me suis trompé.
14 De Franck -
Il faut simplement mettre la balise
{{tpl:FlagFirstPage}}
avant d'utiliser le test. Comme expliqué dans ce billet.15 De manhattan -
Bonsoir, Merci pour ce tuto qui m'éclaire un peu sur la v2... Moi ce que je veux c'est afficher un message d'accueil sur la page d'accueil en récupérant les données du serveur... J'ai une fonction qui fonctionne tres bien sous la V1... en voici un extrait....
mais vu que l'on ne peut pas utiliser le php... J'avoue que j'y perds mon latin !
Peux tu me donner un coup de main ? Merci Philippe.
16 De Franck -
Dans ce cas il suffit de définir une fonction template qui retournera le code PHP complet. Ensuite il faudra insérer la balise template correspondante à l'endroit désiré.