Carnet Wiki

FiltreAgendaMemo

L’objectif de cette page est la description du fonctionnement détaillé du nouveau filtre agenda_memo présent à partir de spip1.8.2

Présentation

Présentation du calendrier spip 1.8.2 dans la documentation officielle

pour l’instant reprend ce qui est écrit dans le descriptif de la 182

Le filtre agenda_memo s’applique sur :

  1. une date
  2. un descriptif
  3. un titre
  4. l’URL d’un article ayant ce titre, ce descriptif et cette date
  5. un nom de classe CSS

Si le premier argument n’est pas nul, le filtre se contente de mémoriser les quatre premiers arguments dans un tableau privé identifié par le cinquième argument et ne retourne rien. Sinon, il retourne son tableau privé. L’utilisation du cinquième argument comme index dans le tableau privé permet d’avoir autant de calendriers par page que nécessaire, avec une typographie différenciée au besoin. La feuille calendrier.css fournit 28 styles différents qu’il est loisible de modifier ou d’étendre.

Le filtre agenda_affiche s’applique sur :

  1. un nombre supposé être le nombre d’événements trouvés par le critère agenda ;
  2. un texte brut ;
  3. un type de calendrier (jour, semaine, mois ou periode) ;
  4. ... des noms de classes CSS utilisées dans l’appel du filtre précédent

Si le premier argument est nul, ce filtre retourne le deuxième argument. Sinon il retourne la mise en page des éléments mémorisés par le filtre précédent sous les noms fournis en argument (ou tous les éléments si aucun nom n’est fourni), selon le type demandé et les classes CSS indiquées. Le type periode restreindra l’affichage à la période comprise entre le plus vieil élément et le plus récent effectivement trouvés, ce qui permet de donner dans le critère une période très large sans récupérer un affichage trop long.

Enfin, le filtre agenda_connu teste si son argument est l’un des quatre types de calendriers connu (jour, semaine, mois ou periode).

L’utilisation du cinquième argument comme identificateur du tableau privé permet d’avoir autant de calendriers par page que nécessaire, avec une typographie différenciée au besoin. La feuille calendrier.css fournit 28 styles différents qu’il est loisible de modifier ou d’étendre.

Ce critère et ces filtres sont utilisés par les nouveaux squelettes agenda_jour.html, agenda_semaine.html, agenda_mois.html agenda_periode.html, appelés à partir du squelette agenda.html qui indique dans son en-tête les feuilles de style et fonctions JavaScript nécessaires (mais remplaçables à volonté). Ces squelettes fournissent donc un exemple représentatif d’utilisation.

Utilisation avancée

en cours d’analyse

en plus des 4 types de calendrier fournis (jour,semaine,mois,periode), il est possible de créer son propre modèle en changeant le troisième arguments de agenda_affiche (ex : agenda_affiche( <:aucun_article :>, ’mini_mois’) ) et en codant la fonction d’affichage associé http_calendrier_nom modele (ex : http_calendrier_mini_mois($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt) )

Tutorial

Attention : dans tout ce paragraphe, le terme date se rapporte à une date qui comprend l’heure

Pour réaliser un agenda simple avec SPIP il vous faut :
-  1. des évènements : n’importe quel article ou brève SPIP fera l’affaire. Nous prendrons donc des ARTICLES dans cet exemple, mais n’importe quel objet SPIP qui contient une DATE ferait l’affaire. Vous pouvez bien sur choisir de ne voir que les articles d’une rubrique, ou seulement les articles correspondant à un mot-clef… A vous de faire des boucles autour de la boucle qui fait l’agenda.

-  2. une boucle sur ces évènements.

Pour réaliser cette boucle, il existe depuis spip1.8.2 le critère agenda. Il suffit de fournir à ce critère une date, sous la forme d’une année (en 4 chiffres comme 1987) d’un mois (en deux chiffres comme 02) et d’un jour (en deux chiffres comme 09) et de lui demander de sélectionner les évènements (ici, les ARTICLES) sur le mois, le jour ou la semaine qui vous intéresse. Vous pouvez récupérer ces chiffres depuis l’environnement (url d’appel) ou autrement.
Cela s’utilise comme suit (voir les fichiers agenda_jour.html, agenda_semaine.html, agenda_mois.html dans le dossier « dist » de SPIP) :

<BOUCLE_mois(ARTICLES) {agenda date, mois,#ENV{annee}, #ENV{mois}}><!--  une boucle sur un mois -->
...
</BOUCLE_mois>

<BOUCLE_jour(ARTICLES)  {agenda date, jour,#ENV{annee}, #ENV{mois}, #ENV{jour}}> <!-- sur un jour -->
....
</BOUCLE_jour>

<BOUCLE_semaine(ARTICLES) {agenda date, semaine, #ENV{annee}, #ENV{mois}, #ENV{jour}}> <!-- sur la semaine du jour désigné -->
...
</BOUCLE_semaine>

La boucle étant faite, le critère agenda va donner tous les évènements correspondants à la date donnée. Nous allons alors ranger ces évènements dans un calendrier, que l’on appelle avec le filtre agenda_memo. A noter que ce filtre, dans la boucle, n’écrira rien à l’écran : il se borne à ranger les évènements dans un tableau interne a SPIP.

On appelle le filtre agenda_affiche , il s’applique sur :

  1. un nombre supposé être le nombre d’événements trouvés par le critère agenda ;
  2. un texte brut ;
  3. un type de calendrier (jour, semaine, mois ou periode) ;
  4. ... des noms de classes CSS utilisées dans l’appel du filtre précédent

Le nom de CSS permet de fixer l’aspect du calendrier, et aussi d’avoir plusieurs calendriers par page : chaque nom de CSS collecte les évènements dans un tableau (donc un calendrier) à part, que l’on peut rappeler ensuite. La feuille calendrier.css fournit 28 styles différents de calendriers, qu’il est loisible de modifier ou d’étendre.

Dans notre exemple cela donne, pour un jour :

<BOUCLE_jour(ARTICLES)  {agenda date, jour,#ENV{annee}, #ENV{mois}, #ENV{jour}}> <!-- sur un jour -->
[(#DATE| agenda_memo {#DESCRIPTIF, #TITRE, #URL_ARTICLE, 'calendrier-couleur2'})]
</BOUCLE_jour>

comme la boucle est une boucle d’articles, ce sont les descriptifs, titre et URL de l’article qui sont passés au filtre agenda_memo. Vous pouvez passer n’importe quelle valeur (si vous décidez, par exemple de faire un agenda de brèves ou de rubriques…)

Une fois la boucle terminée, rien n’est à l’écran, mais le calendrier est prêt.

-  3. On peut maintenant afficher le calendrier à l’écran, ce qui se fait en APPELANT un nouveau filtre agenda_affiche .
On l’appelle avec un #TOTAL_BOUCLE au cas où ce soit égale a zéro alors le filtre affiche le premier argument du filtre sinon il affiche un agenda avec la feuille CSS (dont le nom est donné à l’étape précédente) ,
et le type de calendrier à dessiner (jour, mois ou semaine). Des types de calendrier peuvent être ajoutés par les programmeurs php.

dans notre exemple cela donnera :

[(#DATE|agenda_affiche{<:aucun_article:>, 'jour','calendrier-couleur2'})]

C’est cette instruction-là qui donnera à l’écran le calendrier souhaité.

— Nota bene :

Ces versions du critère agenda et du filtre agenda_memo- ne gèrent que des évènements sans durée : à un évènement correspond une date/heure de début, mais pas de date/heure de fin. Une version plus complète sera mise en contribution.

-  4. la version complète du code (visible dans le fichier « dist/agenda_jour.html »)

<BOUCLE_jour(ARTICLES)
    {agenda date, jour, #ENV{annee}, #ENV{mois}, #ENV{jour}}{par date}
>[(#DATE|agenda_memo{#DESCRIPTIF, #TITRE, #URL_ARTICLE, 
  calendrier-couleur[(#ENV{theme,0}|modulo{14,1})]})]</BOUCLE_jour>[(#TOTAL_BOUCLE|agenda_affiche{<:aucun_article:>, 'jour', 
  calendrier-couleur[(#ENV{theme,0}|modulo{14,1})]})
<div style='position: fixed; top:50px; left: 20px'>
<table style='width: 10px'><tr>
<td class='calendrier-couleur1'><a style='text-decoration: none;' href='[(#SELF)]&theme=0'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur2'><a style='text-decoration: none;' href='[(#SELF)]&theme=1''>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur3'><a style='text-decoration: none;' href='[(#SELF)]&theme=2'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur4'><a style='text-decoration: none;' href='[(#SELF)]&theme=3'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur5'><a style='text-decoration: none;' href='[(#SELF)]&theme=4'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur6'><a style='text-decoration: none;' href='[(#SELF)]&theme=5''>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur7'><a style='text-decoration: none;' href='[(#SELF)]&theme=6'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur8'><a style='text-decoration: none;' href='[(#SELF)]&theme=7'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur9'><a style='text-decoration: none;' href='[(#SELF)]&theme=8'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur10'><a style='text-decoration: none;' href='[(#SELF)]&theme=9'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur11'><a style='text-decoration: none;' href='[(#SELF)]&theme=10'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur12'><a style='text-decoration: none;' href='[(#SELF)]&theme=11'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur13'><a style='text-decoration: none;' href='[(#SELF)]&theme=12'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur14'><a style='text-decoration: none;' href='[(#SELF)]&theme=13'>&nbsp;&nbsp;</a></td></tr>
</table>
</div>
]<//B_jour>

Décomposons
Avertisement au lecteur ce paragraphe est expérimentale mais peut apporter queques éléments dans l’utilisation de l’agenda spip
Le but de cette partie est de décomposer les éléments modifiables dans le squelette afin de générer un agenda (on prendra comme exemple l’agenda mensuel) dans spip 1.8.2
Afin d’utiliser la nouvelle fonctionnalité du calendrier spip 1.8.2, on utilise d’abord le squelette agenda.html ( dans le répertoire dist )

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="#LANG_DIR" lang="#LANG">
<head>
<title><:icone_agenda:> [#NOM_SITE_SPIP]</title>
<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET" />
<link rel="stylesheet" href="ecrire/calendrier.css" type="text/css" />
<script type="text/javascript" src="ecrire/layer.js"></script>
<script type="text/javascript" src="ecrire/presentation.js"></script>
</head><body>
[(#ENV{type, mois}|agenda_connu)<INCLURE(page.php3)
 {fond=agenda_#ENV{type,mois}}{type}{delais=900}{annee}{mois}{jour}{echelle}{partie_cal}{theme}>]
</body></html>

Par défaut si le type n’est pas mentionné dans l’url, ce sera le type=mois qui sera choisi.

Si vous voulez afficher l’agenda du mois de juillet 2005 de spip contrib l’url sera
http://www.spip-contrib.net/agenda.php3?type=mois&annee=2005&mois=07
Regardons plus en détail le squelette agenda_mois.html dans le répertoire dist

<BOUCLE_mois(ARTICLES)
    {agenda date, mois, #ENV{annee}, #ENV{mois}}{par date}
>[(#DATE|agenda_memo{#DESCRIPTIF,
		#TITRE,
		#URL_ARTICLE,
		calendrier-couleur[(#ID_SECTEUR|
			modulo{14,1})]})]</BOUCLE_mois>[(#TOTAL_BOUCLE|
	agenda_affiche{<:aucun_article:>, 'mois'}
)]<//B_mois>

On fait une boucle sur tous les articles (quitte a vous de limiter les articles a un secteur ou un auteur, ou un mot cle etc...)
Ensuite les DESCRIPTIF, TITRE, URL_ARTICLE sont mémorisés grace aux filtres agenda_memo (si leur DATE appartient au mois sélectionné)
ensuite le filtre agenda_affiche affichera ou non l’agenda s’il y a des articles ou non .

exemple d’utilisation de agenda_periode.html
http://www.spip-contrib.net/agenda.php3?type=periode&annee=2005&mois=07&jour=22&annee_fin=2005&mois_fin=08&jour_fin=12

Montre tous les articles de spip-contrib du 22 juillet 2005 au 12 aout 2005

- Mise à jour :18 novembre 2007 à 17h22min