CGCalendar : affichage conditionnel -
nicks - 06/01/2011
Bonjour, cette petite astuce est plus ou moins une conclusion des discussions suivantes, pour lesquelles je dois avouer les avoir noté comme [résolu] un peu hâtivement...
http://www.cmsmadesimple.fr/forum/viewtopic.php?id=3030
http://www.cmsmadesimple.fr/forum/viewtopic.php?id=3029
Voici donc la solution finale, qui fonctionne (on va dire que cette fois c'est "certain"... soyons optimiste en ce début d'année :) )!
Donc, admettons que vous utilisez CGCalendar et notamment les gabarits "d'évènements à venir" et/ou "d'évènements passés".
C'est vachement bien de pouvoir filtrer des évènements en fonction de leur chronologie, seulement lorsqu'un évènement est passé, par défaut vous vous retrouvez avec un emplacement "vide" sur votre page, ce qui est un peu dommage...
Ce que je vous propose ici, c'est de faire en sorte que les "évènements à venir" "périmés" soient automatiquement remplacés par autre chose (comme par exemple un paragraphe indiquant qu'il n'y a pas de manifestations de programmées, ou encore d'afficher le dernier évènement passé).
Nous disposons d'une rubrique (une page) "à suivre" qui recense uniquement les évènements à venir :
Code :
{cms_module module='CGCalendar' display='upcominglist' detailpage="a-suivre" category='a-suivre' upcominglisttemplate="template-a-suivre"}
Cette page appelle le gabarit d'évènements à venir de CGcalendar : "template-a-suivre" qui se présentera de cette manière :
Code :
{foreach from=$events key=key item=event}
... éléments à afficher pour chaque évènement ...
{/foreach}
Dans l'état, si maintenant nous avons uniquement un évènement qui se passe le 6 janvier, le 7 janvier la page "à suivre" n'affichera plus rien!
On veut donc qu'un message s'affiche (automatiquement) indiquant qu'il n'y a rien de programmé dans les prochains temps.
On va alors ajouter le code suivant dans notre gabarit de CGCalendar "template-a-suivre" :
Code :
{assign var='compteur' value=count($events)}
{foreach from=$events key=key item=event}
... éléments à afficher pour chaque évènement ...
{/foreach}
En gros, on ajoute une variable qui va déterminer si il y a des évènements "à suivre" ou pas. (merci à Bess pour ce bout de code.)
Dans notre rubrique (page) "à suivre", on va mettre en place une condition.
On commence par entrer la balise indiquant qu'on veut afficher les évènements à venir et juste en dessous préciser que s'il n'y a rien à afficher, alors on affiche autre chose!
Code :
{cms_module module='CGCalendar' display='upcominglist' detailpage="a-suivre" category='a-suivre' upcominglisttemplate="template-a-suivre"}
{if $compteur==null}
<p>Il n'y a actuellement pas d'évènement de programmé.<br/>
{/if}
Et voilà le travail! A noter que j'ai énormément "galéré" car j'essayais à tort de mettre la condition avant d'essayer d'afficher CGCalendar, par exemple comme ca :
Code :
{if $compteur==null}
<p>Il n'y a actuellement pas de séminaire(s) programmé(s).<br/>
Vous pouvez toutefois consulter les {cms_selflink page='archives-seminaires' text='archives'} pour en savoir plus sur les séminaires passés.</p>
{else}
{cms_module module='CGCalendar' display='upcominglist' detailpage="a-suivre" category='a-suivre' upcominglisttemplate="template-a-suivre"}
{/if}
Je ne sais pas trop pourquoi (...) mais ca ne marche pas!
Autre détail qui a l'air également important, j'ai pris l'habitude d'utiliser 'null' plutôt que '0', puisque dans le cas des tableaux (array) 0 est en fait le premier éléments de la liste, donc ca peut éventuellement poser des problèmes...
Je laisse le soin à des personnes plus calés en prog que moi de nous éclairer sur ces derniers points... ;)
CGCalendar : affichage conditionnel -
bess - 06/01/2011
je ne peux pas me pencher énormément sur le sujet mais je te remercie d'avoir compilé tes investigations
si quelqu'un à l'occasion de tester...
CGCalendar : affichage conditionnel -
Ouik - 07/01/2011
mortel, je pense tester ça un de ces 4. Merci !
CGCalendar : affichage conditionnel - ppatrick - 25/07/2011
Bonjour, J'ai testé :
Code :
{assign var='compteur' value=count($events)}
Code :
{if $compteur==null}
<p>Il n'y a actuellement pas d'évènement de programmé.<br/>
{/if}
Quoi dire ????
Extra... Merci...