SPIP-Contrib

SPIP-Contrib

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

290 Plugins, 198 contribs sur SPIP-Zone, 88 visiteurs en ce moment

Accueil > Dates, calendriers et agendas > Plugin Agenda > Répétitions et Événement source du plugin Agenda : comment éviter les (...)

Répétitions et Événement source du plugin Agenda : comment éviter les redondances ?

8 avril 2015 – par Thiébaut – commentaires

15 votes

Solution perfectible mais réponse fonctionnelle à une demande récurrente et pertinente concernant le plugin Agenda : regrouper les dates des répétitions, sous le titre de leur événement source, afin d’éviter les redondances. Exemple à l’appui.

Le problème

L’excellent plugin Agenda permet en effet d’attribuer plusieurs dates à un seul et même événement dont les autres champs ne changeraient pas. C’est très pratique côté rédaction...

Côté public, les champs de l’événement sont affichés autant de fois qu’il y a de répétitions :

  • Tant que ces dernières sont suffisamment espacées dans le temps, ou mélangées à d’autres événements différents, tout va bien...
  • Mais quand elles se retrouvent les unes contre les autres, le pléonasme est flagrant : « les répétitions sont vraiment redondantes » !

Ce problème a été évoqué plusieurs fois sur les listes et les forums, sans réponse vraiment satisfaisante.

Un exemple concret

Nous sommes le 2 avril et nous avons trois enregistré trois événements dans l’agenda, dont deux contiennent des répétitions.
-  Un concert prévu le 6 avril à 20h30 au Zénith de Saint-Agnan ;
-  Un cycle d’apéro-spip à l’Open Software Club de Saint-Brisson, qui a démarré le 1er avril et dont les répétitions sont programmées les 8, 15, 22 et 29 avril de 11h à 12h ;
-  Deux projections du superbe film "El Chino" les 12 et 14 avril à 20h00 au Cinéma Vauban ;

En l’état actuel, avec une simple boucle d’événements à venir, on obtiendrait ceci :

  • Concert, le 6 avril à 20h30 au Zénith de Saint-Agnan ;
  • Apéro-spip à l’Open Software Club de Saint-Brisson le 8 avril 2015 de 11h à 12h00 ;
  • Projection du superbe film "El Chino" au Cinéma Vauban le 12 avril 2015 à 20h00 ;
  • Projection du superbe film "El Chino" au Cinéma Vauban le 14 avril 2015 à 20h00 ;
  • Apéro-spip à l’Open Software Club de Saint-Brisson le 15 avril 2015 de 11h à 12h00 ;
  • Apéro-spip à l’Open Software Club de Saint-Brisson le 22 avril 2015 de 11h à 12h00 ;
  • Apéro-spip à l’Open Software Club de Saint-Brisson le 29 avril 2015 de 11h à 12h00 ;

Quelques observations

  • Un événement source est à la fois indépendant et initial :
    • ayant sa propre date, il est totalement indépendant de ses répétitions ;
    • la date d’un événement source est antérieure à ses répétitions ;
  • A l’exception de leur ID et de leur date, les répétitions sont dépendantes de l’événement source, auquel elles sont liées par un champ id_evenement_source ;
  • Les événements qui n’ont pas de source (id_evenement_source=0) peuvent être :
    • soit des événements sans répétitions ;
    • soit des événements sources ayant une ou plusieurs répétitions.
  • Le champ id_evenement_source permet de distinguer un événement source (valeur=0) d’un événement répété (valeur !=0).

Objectifs

Sur l’agenda d’un site annonçant des événements à venir avec et sans répétitions :

  • on désire afficher une seule fois le titre d’un événement répété ;
  • on aimerait regrouper, sous le titre d’un événement répété, les dates de ses répétitions futures, en commençant par la prochaine ;
  • on souhaiterait pouvoir trier tous les événements, répétés ou non, par la date de début de leur prochaine occurrence :
    • dans le cas d’un événement non répété, il s’agira de sa date de début ;
    • dans le cas d’un événement répété, il s’agira de la date de début de sa prochaine répétition.

Concrètement, sur la base de notre exemple, voilà ce qu’on aimerait afficher le 2 avril :

  • Concert, le 6 avril à 20h30 au Zénith de Saint-Agnan ;
  • Apéro-spip à l’Open Software Club de Saint-Brisson : 8 avril, 15 avril, 22 avril, 29 avril - De 11h à 12h00
  • Projection du superbe film "El Chino" au Cinéma Vauban : 12 avril, 14 avril - 20h00 ;

Toujours sur la base de notre exemple, voilà ce qu’on aimerait afficher le 9 avril :

  • Projection du superbe film "El Chino" au Cinéma Vauban : 12 avril, 14 avril - 20h00 ;
  • Apéro-spip à l’Open Software Club de Saint-Brisson : 15 avril, 22 avril, 29 avril - De 11h à 12h00

Première étape : sélectionner les dates à venir

Les dates des répétitions seront affichées sous leur événement source. A priori, dans un premier temps, seuls les événements sources et les événements sans répétitions nous intéressent. C’est à dire, uniquement les événements à venir ayant un id_evenement_source=0.

Mais comment faire pour les événements sources dont la date initiale serait passée... et l’une de ses répétitions à venir ? Une seule possibilité : les sélectionner via le champ id_evenement_source de leurs répétitions...

Pour cela, nous allons créer un tableau via #ARRAY, que nous appellerons « tableauprochainement ».

Puis nous allons remplir ce tableau avec les ID des événements qui nous intéressent :

  • Si l’id_evenement_source est égal zéro, il s’agit d’un événement source ou d’un événement non répété : on prend donc directement l’#ID_EVENEMENT ;
  • Si l’id_evenement_source est différent de zéro, il s’agit d’une répétition : dans ce cas, c’est l’#ID_EVENEMENT_SOURCE qui nous intéresse.
  1. #SET{tableauprochainement,#ARRAY}
  2. <BOUCLE_prochainementselection(EVENEMENTS){age_fin>=-365}{age_debut<=0}{par date_debut}>
  3. [(#ID_EVENEMENT_SOURCE|=={0}|?{                        
  4.         #SET{tableauprochainement,#GET{tableauprochainement}|push{#ID_EVENEMENT}},                             
  5.         #SET{tableauprochainement,#GET{tableauprochainement}|push{#ID_EVENEMENT_SOURCE}}
  6. })]
  7. </BOUCLE_prochainementselection>

Télécharger

Remarque : le tri d’affichage, par date de début, se fait ici, au moment du remplissage du tableau.

Deuxième étape : afficher les dates à venir sous leurs événements respectifs

Dans une boucle principale, on appelle les événements sélectionnés dans notre tableau, qui peut contenir, par date de début de la prochaine occurrence :

  • des événements à venir sans répétitions ;
  • des événements source avec répétitions ;

On commence par afficher, dans l’ordre du tableau, le titre de ces événements. Puis, à l’aide de deux autres boucles internes, on cherche les dates :

  1. La première boucle de date affichera la date de l’événement dont on a affiché le titre si les conditions suivantes sont remplies, :
    • si l’événement en question n’a aucune répétition ;
    • si l’événement en question contient des répétitions mais que sa date initiale n’est pas encore passée.
  2. La deuxième boucle de date affichera les dates des prochaines répétitions de l’événement dont on a affiché le titre.
  1. <B_prochainement>
  2. <ul>    
  3. <BOUCLE_prochainement(EVENEMENTS){id_evenement IN #GET{tableauprochainement}}>
  4. <li>
  5. <h4>#TITRE</h4>
  6. <BOUCLE_dateevenement(EVENEMENTS){id_evenement}{age_fin>=-365}{age_debut<=0}>
  7. <p>[(#DATE_DEBUT|Agenda_affdate_debut_fin{#DATE_FIN)]</p>
  8. </BOUCLE_deteevenement>
  9. <BOUCLE_daterepetition(EVENEMENTS){id_evenement_source=#ID_EVENEMENT}{age_fin>=-365}{age_debut<=0}>
  10. <p>[(#DATE_DEBUT|Agenda_affdate_debut_fin{#DATE_FIN,#HORAIRE})]</p>
  11. </BOUCLE_daterepetition>
  12. <p>#LIEU</p>   
  13. </li>
  14. </BOUCLE_prochainement>
  15. </ul>
  16. </B_prochainement>     

Télécharger

Remarque : pour ne pas compliquer la boucle, je ne suis volontairement pas allé jusqu’au bout des critères de date, qui permettent notamment d’afficher les horaires qu’une seule fois (ceux d’une répétition ne sont pour le moment pas réglables : c’est l’événement source qui les définit... donc aucun intérêt de les dupliquer à chaque fois). Une fois qu’on est arrivé là, c’est une formalité...

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

Retour en haut de la page

Vos commentaires

  • Le 16 avril à 23:29, par Jean Christophe Villeneuve En réponse à : Répétitions et Événement source du plugin Agenda : comment éviter les redondances ?

    Hello

    Je ne sais pas si c’est possible mais imaginons que j’aie un événement qui se répète tous les mois sur 12 mois, de janvier à décembre.
    Grâce aux explications ci-dessus, j’affiche l’événement source de janvier et dessous la liste des événements des mois à venir.
    Maintenant, je voudrais ne pas afficher l’événement de janvier mais seulement les événements à venir avec en exergue le premier événement dans le futur et dessous, la liste des autres événements des mois à venir.

    Possible ?

    • Le 18 avril à 11:36, par Jean Christophe Villeneuve En réponse à : Répétitions et Événement source du plugin Agenda : comment éviter les redondances ?

      C’est bon, j’ai fini par trouver :

      #SET{tableauprochainement,#ARRAY}
      <BOUCLE_prochainementselection(EVENEMENTS){age_fin<=1}{par date_debut}>
      [(#ID_EVENEMENT_SOURCE|=={0}|?{                               
      #SET{tableauprochainement,#GET{tableauprochainement}|push{#ID_EVENEMENT}},                               
      #SET{tableauprochainement,#GET{tableauprochainement}|push{#ID_EVENEMENT_SOURCE}}
      })]
      </BOUCLE_prochainementselection>

                      <BOUCLE_evenements_agenda(EVENEMENTS){id_evenement IN #GET{tableauprochainement}}
                      {pagination #GET{nbrpagevent}}{lang}>

                              <BOUCLE_seul(EVENEMENTS){id_evenement=#ID_EVENEMENT}{age<=1}{par date}{0,1}{doublons}>
                              </BOUCLE_seul>
                              <BOUCLE_premier(EVENEMENTS){id_evenement_source=#ID_EVENEMENT}{age<=1}{par date}{0,1}{doublons}>
                              </BOUCLE_premier>
                             
                              <div class="liste-evenements">                 
                      
                              <BOUCLE_affiche(EVENEMENTS){!doublons}{doublons affiche}{par date}>
                              [(#DATE_DEBUT|affdate_jourcourt)] :
                              <a href="[(#URL_EVENEMENT|parametre_url{lang,#ENV{lang}})]" title="[(#DESCRIPTIF|textebrut)]">#TITRE</a>
                       </BOUCLE_affiche>
                      
                       <BOUCLE_autres(EVENEMENTS){id_evenement_source=#ID_EVENEMENT}{age<=1}{age>=-365}{par date}{doublons affiche}>
                               <br />&nbsp;&nbsp;+ [(#DATE_DEBUT|affdate_jourcourt)]
                       </BOUCLE_autres>
                              </div>
               
                      </BOUCLE_evenements_agenda>

    Répondre à ce message

  • Le 8 septembre 2016 à 13:43, par Philippe En réponse à : Répétitions et Événement source du plugin Agenda : comment éviter les redondances ?

    Bonjour

    Au moment de la création d’un événement à la date X, l’agenda génère systématiquement le même événement à la date de la rédaction. Je ne comprends pas.
    Merci beaucoup pour votre aide.
    Philippe

    • Le 8 septembre 2016 à 21:24, par Thiébaut En réponse à : Répétitions et Événement source du plugin Agenda : comment éviter les redondances ?

      Bonjour, j’utilise la dernière version de l’agenda sous la dernière version de spip avec plein de dates. Pourtant, je n’ai encore jamais rencontré ce problème. N’avez-vous pas fait « ajouter une répétition » par mégarde ? N’y a t-il pas une option à décocher ?

      Quoiqu’il en soit, il me semble que cette question aurait plus sa place sous l’article du plugin Agenda. Peut-être aussi préciser les versions utilisées ?

      Bonne suite

    Répondre à ce message

  • Le 8 septembre 2016 à 13:34, par Philippe En réponse à : Répétitions et Événement source du plugin Agenda : comment éviter les redondances ?

    Bonjour

    Bonjour

    Au moment de la création d’un événement à la date X, l’agenda génère systématiquement le même événement à la date de la rédaction. Je ne comprends pas.
    Merci beaucoup pour votre aide.
    Philippe

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

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

  • Simple Calendrier v2

    25 février 2016 – 26 commentaires

    Il s’agit de la version pour SPIP 3 du plugin Simple Calendrier. Le plugin « simple calendrier » permet de gérer des évènements en ajoutant un nouvel objet éditorial dans l’administration de votre site SPIP. Il peut constituer une alternative au plugin (...)

  • ScolaSPIP 4

    19 janvier 2016 – 375 commentaires

    ScolaSPIP est plugin-squelette responsive personnalisable pour sites Web d’établissements scolaires basé sur SPIPr Présentation de ScolaSPIP Ce plugin pour SPIP 3 est développé par la Dane de l’académie de Versailles pour les webmestres de cette (...)

  • Mailsubscribers

    16 janvier 2013 – 432 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 (...)

  • Flux RSS configurable

    8 avril 2011 – 68 commentaires

    Ce plugin vous permet de personnaliser le fonctionnement de votre flux RSS à l’aide d’un formulaire dans l’espace privé. Instalation Pour fonctionner, ce plugin nécessite que le plugin Itérateurs soit installé et activé sur votre site. Par (...)

  • Réservation d’événements

    16 mars 2015 – 421 commentaires

    Ce plugin permet d’offrir aux visiteurs de s’inscrire pour un évènement du plugin Agenda et de gérer les réservations enregistrées. Installation Le plugin s’installe comme n’importe quel plugin. il nécessite : Agenda API de vérification Facteur (...)