SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

289 Plugins, 197 contribs sur SPIP-Zone, 115 visiteurs en ce moment

Accueil > Dates, calendriers et agendas > Plugin Agenda > Agenda : afficher les événements mois par mois avec fusion

Agenda : afficher les événements mois par mois avec {fusion}

28 décembre 2016 – par Thiébaut

7 votes

Ceci est une « contribution pédagogique », qui montre par l’exemple comment développer une nouvelle fonctionnalité pour SPIP.

Cette modeste contribution s’adresse aux utilisateurs/trices du plugin Agenda qui voudraient afficher leurs événements en les triant par année et par mois avec le critère {fusion}.

Certains événements, comme les expositions, s’inscrivent sur la durée : leur date de fin peut être très éloignée de leur date de début. S’ils ont déjà commencé, mais ne sont pas terminés, il est judicieux de les séparer des autres en créant une partie « en cours ».

Pour filtrer l’affichage des événements sur des intervalles de temps, plutôt que de multiplier les critères de sélection, on va associer deux techniques :

  • la sélection à l’aide de la paire de critères doublons/anti-doublons (voire la doc de SPIP et l’explication complémentaire sur Contrib) ;
  • le regroupement d’après la valeur d’un champ, avec le critère fusion.

Ce qu’on veut obtenir

L’objectif est donc d’extraire de façon automatique les événements [1], qu’ils soient dans l’intervalle du mois courant, ou à venir, en éliminant les dates échues.

A. Sélectionner tous les événements non finis

Une première boucle va servir de référence - un doublon nommé - pour « mémoriser » les événements publiés, commencés ou non, dont la date de fin est située dans le futur.

  1. <BOUCLE_evtpasfini(EVENEMENTS){age_fin<=0}{statut=publie}{doublons evtpasfini}/>

Cette boucle sert seulement à sélectionner des événements, pas à les afficher, elle peut donc être de type « auto-fermante » : il suffit de la balise d’ouverture, sa fin y est intégrée par le /> final.

Rappel au sujet de la technique doublons/antidoublons : {doublons} permet de mémoriser la sortie d’une boucle... que l’on récupère ensuite dans une autre boucle avec l’antidoublons, noté {!doublons}.

B. Récupérer et afficher la sélection

En premier, on veut afficher les événements en cours, qui ont déjà commencé mais ne sont pas terminés, comme les expositions :

  1. <B_encours>
  2. <h3>En cours</h3>
  3. <BOUCLE_encours(EVENEMENTS){!doublons evtpasfini}{age_debut>=1}{par date_fin}{doublons encours}>
  4. </BOUCLE_encours>
  5. </B_encours>

Télécharger

En deuxième on veut le reste des événements triés par année et par mois. Ce mécanisme de regroupement nécessite deux boucles imbriquées avec le critère {fusion} spécifiant successivement les deux valeurs, année et mois :

  1. <B_annees>
  2. <BOUCLE_annees(EVENEMENTS){!doublons evtpasfini}{age_debut<=1}{par date_debut}{annee_relatif_debut}{lang_select=non}{fusion YEAR(date_debut)}{fusion MONTH(date_debut)}>
  3.  
  4. <B_mois>
  5. <h3>[(#DATE_DEBUT|nom_mois|ucfirst) ][(#DATE_DEBUT|annee)]</h3>
  6. <BOUCLE_mois(EVENEMENTS){!doublons evtpasfini}{age_debut<=1}{par date_debut}{mois_relatif_debut}{doublons}>
  7. </BOUCLE_mois>
  8. </B_mois>
  9.  
  10. </BOUCLE_annees>
  11. </B_annees>

Télécharger

Notez l’importance des critères {annee_relatif} et {mois_relatif} documentés ici... que l’on peut appliquer aux dates de début ou de fin utilisées par le plugin Agenda.

C. Afficher le tout sous la forme d’une liste à puce

Pour des raisons d’accessibilité, on veut afficher le tout sous la forme d’une seule liste à puce. Voici ce que cela donne :

  1. <B_evt>
  2. <div class="liste_mots_articles">
  3. <ul>
  4. <BOUCLE_evt(EVENEMENTS){!doublons evtpasfini}>
  5. <B_encours>
  6. <li><h3>En cours</h3>
  7. <ul>
  8. <BOUCLE_encours(EVENEMENTS){!doublons evtpasfini}{age_debut>=1}{par date_fin}{doublons encours}>
  9. <li>
  10. <a class="uid url" href="[(#URL_ARTICLE|ancre_url{evt#ID_EVENEMENT})]">
  11. <h4 class="summary">[(#LOGO_EVENEMENT)][(#TITRE)]</h4>
  12. </a>
  13. <p class="dateevenement dtstart"> [(#DATE_DEBUT|Agenda_affdate_debut_fin{#DATE_FIN,#HORAIRE})]</p>
  14. <p class="lieuevenement location">[(#LIEU|sinon{#LESCOMMUNES})][<br/> (#ADRESSE|deparagrapher)]</p>
  15. </li>
  16. </BOUCLE_encours>
  17. </ul>
  18. </li>
  19. </B_encours>
  20.  
  21. <B_annees>
  22. <BOUCLE_annees(EVENEMENTS){!doublons evtpasfini}{age_debut<=1}{par date_debut}{annee_relatif_debut}{lang_select=non}{fusion YEAR(date_debut)}{fusion MONTH(date_debut)}>
  23. <B_mois>
  24. <li><h3>[(#DATE_DEBUT|nom_mois|ucfirst) ][(#DATE_DEBUT|annee)]</h3>
  25. <ul>
  26. <BOUCLE_mois(EVENEMENTS){!doublons evtpasfini}{age_debut<=1}{par date_debut}{mois_relatif_debut}{doublons}>
  27. <li>
  28. <a class="uid url" href="[(#URL_ARTICLE|ancre_url{evt#ID_EVENEMENT})]">
  29. <h4 class="summary">[(#LOGO_EVENEMENT)][(#TITRE)]</h4></a>
  30. <p class="dateevenement dtstart">[(#DATE_DEBUT|Agenda_affdate_debut_fin{#DATE_FIN,#HORAIRE})]</p>
  31. <p class="lieuevenement location">[(#LIEU|sinon{#LESCOMMUNES})][<br/> (#ADRESSE|deparagrapher)]</p>
  32. </li>
  33. </BOUCLE_mois>
  34. </ul>
  35. </li>
  36. </B_mois>
  37.  
  38. </BOUCLE_annees>
  39. </B_annees>
  40. </BOUCLE_evt>
  41. </ul>
  42. </div>
  43. </B_evt>

Télécharger

Notes

[1Cette démarche est valable sur tous les objets datés de SPIP, sous réserve d’adapter les critères d’age et de date aux champs disponibles…

Dernière modification de cette page le 28 décembre 2016

Retour en haut de la page

Répondre à cet article

Qui êtes-vous ?
  • [Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Pub Banner : gestionnaire de bannières publicitaires

    28 juin 2011 – 131 commentaires

    Le plugin « PUB BANNER » est un gestionnaire complet de bannières publicitaires pour des squelettes SPIP. Il prend en charge tous les types de bannières et permet de leur attribuer des publicités (locales ou distantes, images ou Flash). Chaque (...)

  • GIS 4

    11 août 2012 – 1439 commentaires

    Présentation et nouveautés La version 4 de GIS abandonne la libraire Mapstraction au profit de Leaflet. Cette librairie permet de s’affranchir des librairies propriétaires tout en gardant les mêmes fonctionnalités, elle propose même de nouvelles (...)

  • Leadescent (Squelette)

    28 avril 2012 – 73 commentaires

    Présentation : Ce squelette permet de modifier la page d’index du thème Leadescent (adapté du thème Wordpress du même nom réalisé par Padd Solutions). Voir une démo du thème et du squelette Leadescent. Il est recommandé d’installer le thème associé à (...)

  • Mailsubscribers

    16 janvier 2013 – 372 commentaires

    Ce plugin permet de gérer les inscriptions (ou abonnements) à la diffusion de contenu par email. Mailsubscribers permet de gérer les inscriptions par Opt-in simple ou double et la désinscription par URL. Ce plugin gère également plusieurs listes de (...)

  • Leadescent (Thème)

    28 avril 2012 – 21 commentaires

    Présentation : Leadescent est un thème blanc, deux colonnes, adapté du thème Wordpress du même nom réalisé par Padd Solutions. Voir une démo du thème Leadescent. Il est recommandé d’installer le squelette associé à ce thème. Captures : (...)