SPIP-Contrib

SPIP-Contrib

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

278 Plugins, 195 contribs sur SPIP-Zone, 73 visiteurs en ce moment

Accueil > Dates, calendriers et agendas > Plugin Agenda > SPIP 3, Agenda et FullCalendar

SPIP 3, Agenda et FullCalendar

6 août 2012 – par Maïeul – 135 commentaires

10 votes

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

Depuis SPIP 3, l’affichage d’un agenda sous forme de calendrier par jour/semaine/mois à changé. Les filtres |agenda_memo et apparentés sont désormais obsolètes. Il en est de même pour les filtres agendafull_memo et apparentés du plugin Agenda.

Désormais, l’affichage d’un calendrier s’appuie sur la librairie javascript FullCalendar. Voici un tutoriel pour comprendre comment s’en servir avec Agenda 3.0.

Souhait

Nous souhaitons afficher tous les événements (publiés) du site sous forme calendaire, en proposant d’abord un affichage par mois, avec possibilité de basculer en affichage par semaine ou par jour.

PNG - 39.8 ko
Agenda souhaité au final

Pré-requis

  • SPIP 3.0.x, en ayant conservé l’organiseur dans plugins-dist.
  • Plugin Agenda 3.6.11 minimum.
  • Compréhension de la mécanique des squelettes de SPIP.
  • Quelques évènements à afficher.

Vous n’avez pas besoin d’installer la librairire FullCalendar : elle est livrée avec SPIP.

Principe de base

Pour afficher notre agenda nous allons :

  1. créer un squelette agenda.html, avec un div dont l’attribut id est agenda.
  2. appeler dans le squelette le script fullcalendar et ses feuilles de styles.
  3. utiliser ce script pour afficher l’agenda dans dans la div#agenda.
  4. créer un squelette agenda.json.html fournissant au script les données à afficher dans l’agenda.

Fichiers manipulés

 
Dans cet article nous manipulons deux fichiers squelettes : 

  • article.html (qui contient le code nécessaire à l’affichage du calendrier).
  • agenda.json.html (qui nous permet de générer une liste d’événements compatible avec le script fullcalendar).

Si l’un de ces squelette existe déjà, je vous invite à utiliser le mécanisme de surcharge de SPIP.

Création du squelette

Il nous faut créer un squelette agenda.html complet (à savoir une page SPIP classique avec les balises etc), dans lequel nous mettons un div dont l’attribut id est agenda à l’endroit où nous souhaitons que l’agenda s’affiche.

Au dessus de ce div, nous allons appeler :

  • la version compressée du script fullcalendar
  • les styles associés à ce script.

Pour ce faire, nous utilisons la balise #CHEMIN :

  1. <link rel='stylesheet' type='text/css' href='#CHEMIN{lib/fullcalendar/fullcalendar.css}' />
  2. <script type='text/javascript' src='#CHEMIN{lib/fullcalendar/fullcalendar.min.js}'></script>
  3. <div id="agenda">
  4. </div>

Appel à l’agenda

Nous allons maintenant ajouter les fonctions javascript qui permette d’afficher l’agenda. Pour ce faire, nous allons mettre au dessus du div (cela pourrait être dedans ou en dessous, cela importe peu) le code suivant, que je vais commenter :

  1. <script type="text/javascript">/*<![CDATA[*/
  2. jQuery(document).ready(function() {
  3.  
  4.        
  5.         $('#agenda').fullCalendar({
  6.                         editable: false,
  7.                         events: "[(#URL_PAGE{agenda.json})]",
  8.                         header: {
  9.                                 left: 'prevYear,prev,next,nextYear today',
  10.                                 center: 'title',
  11.                                 right: 'month,agendaWeek,agendaDay'
  12.                         },
  13.                         firstDay: 1,
  14.                         monthNames:['<:date_mois_1|attribut_html:>','<:date_mois_2|attribut_html:>','<:date_mois_3|attribut_html:>','<:date_mois_4|attribut_html:>','<:date_mois_5|attribut_html:>','<:date_mois_6|attribut_html:>','<:date_mois_7|attribut_html:>','<:date_mois_8|attribut_html:>','<:date_mois_9|attribut_html:>','<:date_mois_10|attribut_html:>','<:date_mois_11|attribut_html:>','<:date_mois_12|attribut_html:>'],
  15.                         monthNamesShort:['<:date_mois_1_abbr|attribut_html:>','<:date_mois_2_abbr|attribut_html:>','<:date_mois_3_abbr|attribut_html:>','<:date_mois_4_abbr|attribut_html:>','<:date_mois_5_abbr|attribut_html:>','<:date_mois_6_abbr|attribut_html:>','<:date_mois_7_abbr|attribut_html:>','<:date_mois_8_abbr|attribut_html:>','<:date_mois_9_abbr|attribut_html:>','<:date_mois_10_abbr|attribut_html:>','<:date_mois_11_abbr|attribut_html:>','<:date_mois_12_abbr|attribut_html:>'],
  16.                         dayNames:['<:date_jour_1|attribut_html:>','<:date_jour_2|attribut_html:>','<:date_jour_3|attribut_html:>','<:date_jour_4|attribut_html:>','<:date_jour_5|attribut_html:>','<:date_jour_6|attribut_html:>','<:date_jour_7|attribut_html:>'],
  17.                         dayNamesShort:['<:date_jour_1_abbr|attribut_html:>','<:date_jour_2_abbr|attribut_html:>','<:date_jour_3_abbr|attribut_html:>','<:date_jour_4_abbr|attribut_html:>','<:date_jour_5_abbr|attribut_html:>','<:date_jour_6_abbr|attribut_html:>','<:date_jour_7_abbr|attribut_html:>'],
  18.                         buttonText: {
  19.                                         today: '<:date_aujourdhui|attribut_html:>',
  20.                                         month: '<:organiseur:cal_par_mois|attribut_html:>',
  21.                                         day: '<:organiseur:cal_par_jour|attribut_html:>',
  22.                                         week: '<:organiseur:cal_par_semaine|attribut_html:>'
  23.                         },
  24.                         weekMode : 'liquid',
  25.                         loading: function(bool) {
  26.                                 if (bool) $('#calendrier-loading').show();
  27.                                 else $('#calendrier-loading').hide();
  28.                         },
  29.                         timeFormat: {
  30.                                
  31.                                 agenda: "H'h'mm{ - H'h'mm}",
  32.                                
  33.                                 '': "H'h'(mm)"
  34.                         },
  35.                         axisFormat: "H'h'(mm)",
  36.                         allDayText:'<:organiseur:cal_jour_entier|attribut_html:>',
  37.                         columnFormat: {
  38.                                 month: 'ddd',    
  39.                                 week: 'ddd d/M',
  40.                                 day: 'dddd d/M'  
  41.                         },
  42.                         titleFormat: {
  43.                                 month: 'MMMM yyyy',                            
  44.                                 week: "d [ MMM] [ yyyy]{ '&#8212;' d MMM yyyy}",
  45.                                 day: 'dddd d MMM yyyy'                  
  46.                         },
  47.                         dayClick: function(date, allDay, jsEvent, view) {
  48.                                 if(view.name=='month'){
  49.                                         $('.fc-button-agendaWeek').click();
  50.                                         $('#calendrier').fullCalendar( 'gotoDate', date );
  51.                                 }
  52.                                 else
  53.                                         if(view.name=='agendaWeek'){
  54.                                                 $('.fc-button-agendaDay').click();
  55.                                                 $('#calendrier').fullCalendar( 'gotoDate', date );
  56.                                         }
  57.                         },
  58.                         isRTL : [(#LANG_DIR|=={rtl}|?{true,false})]
  59.         })
  60.  
  61. });
  62. /*]]>*/</script>
  • l. 2 jQuery(document).ready(function() signifie qu’à la fin du chargement du document, le navigateur va exécuter la fonction dans les accolades qui suivent.
  • l. 5 $('#agenda').fullCalendar signifie que nous allons demander à javascript de modifier le div dont l’id est égale à agenda pour y mettre à la place .…l’agenda.
  • Le code entre parenthèse puis accolade correspond aux options passées à l’agenda (l. 5-59) :
    • l. 6 : on ne peut éditer les évènements depuis l’agenda.
    • l. 7 : on récuperera la liste des évènements via un squelette agenda.json.html, nous détaillerons ce squelette dans la partie suivante
    • l. 8-12 : qu’affiche-t-on dans l’entête de l’agenda ? :
      • l. 9 : à gauche, on met les boutons de navigation par mois/semaines/jours (selon le type de calendrier) et par années (dans tout les cas).
      • l. 10 : au centre, on affiche le titre de l’agenda, correspondant à la période affichée (par ex. « Août 2012 »).
      • l. 11 : à droite, on affiche la bascule vers l’agenda en mode mois, semaine ou jour.
    • l. 13 : le premier jour de la semaine est le lundi (=1)
    • l. 14 : noms des mois, définis avec les chaînes de langues de SPIP.
    • l. 15 : noms des mois en abrégé.
    • l. 16 : noms des jours.
    • l. 17 : nom des jours en abrégé.
    • l. 18-23 : textes des boutons.
    • l. 24 : selon les mois, on affichera 4, 5 ou 6 semaines, mais en faisant varier visuellement la hauteur des semaines, pour avoir un mois dont la hauteur est constante. Je renvoie à la documentation sur weekMode.
    • l. 25-27 : permet d’afficher un contenu le temps que l’agenda se charge. Nous en parlerons plus loins.
    • l. 29-34 : formatage des heures dans l’agenda :
      • l. 31 : lorsqu’on est par semaine ou par jour, on affiche l’heure et les minutes.
      • l. 33 : dans les autres cas, juste l’heure.
    • l. 35 : formatage des heures sur l’axe vertical (pour l’affichage par jours).
    • l. 36 : texte indiquant qu’un événement dure une journée entière.
    • l. 37-41 : formatage des dates dans les entêtes de colonnes :
      • l. 38 : pour l’affichage par mois.
      • l. 39 : pour l’affichage par semaines.
      • l. 40 : pour l’affichage par jours.
    • l. 42-46 : titre de l’agenda :
      • l. 43 : lors de l’affichage par mois.
      • l. 44 : lors de l’affichage par semaines.
      • l. 46 : lors de l’affichage par jours.
    • l. 47-57 : action à executer lorsqu’on clique sur un jour.
    • l. 58 : notre agenda doit-il se lire de gauche à droite ou de droite à gauche ?

D’autres options sont bien sûr possible : on se reportera à la documentation de FullCalendar.

Sélection des évènements à afficher

Pour pouvoir afficher les évènements, il va falloir nous fabriquer un squelette agenda.json.html (cf. l. 7) qui retournera les évènements qui nous intéreressent sous forme de donnée JSON.

La page spip.php?page=agenda.json sera automatiquement appelée par FullCalendar, qui lui passera deux arguments, variant selon la période demandée :

  • start, correspondant au timestamp de la date de début.
  • end, correspondant au timestamp de la date de fin.

Dans le squelette agenda.json.html correspondant à cette page, nous pourrons récuperer ces informations via : #ENV{start} et #ENV{end} (voir mon article sur la balise #ENV). On pourrait éventuellement passer d’autres arguments, en appliquant le filtre |parametre_url sur #URL_PAGE{agenda.json}.

Voilà un squelette agenda.json.html basique :

  1. #HTTP_HEADER{Content-type:text/javascript;}
  2. [<BOUCLE_evenements(EVENEMENTS){', '}{par date_debut}  
  3. {agendafull date_debut,date_fin, periode,
  4.         #VAL{Y}|date{#ENV{start}}, #VAL{m}|date{#ENV{start}},     #VAL{d}|date{#ENV{start}},
  5.         #VAL{Y}|date{#ENV{end}}, #VAL{m}|date{#ENV{end}}, #VAL{d}|date{#ENV{end}}}
  6.         >
  7.                                         [(#ARRAY{id,#ID_EVENEMENT,
  8. title,[(#TITRE|html2unicode|unicode2charset)],
  9. allDay,[(#HORAIRE|=={non}|?{#EVAL{true},#EVAL{false}})],
  10. start,#DATE_DEBUT,
  11. end,#DATE_FIN,
  12. url,#URL_ARTICLE,
  13. description,[(#DESCRIPTIF|html2unicode|unicode2charset)]}|json_encode)]
  14. </BOUCLE_evenements>]

Je commente rapidement ce squelette :

  • l. 1. On demande à SPIP de :
    • Ne pas insérer de boutons d’administration.
    • Dire au navigateur que la page retournée est du javascript et non du HTML.
    • l. 2 et l .15, les crochets servent à indiquer que nous retournons plusieurs objets JSON, chacun correspondant à un évènements.
    • l. 2 nous bouclons sur les évènements. Entre chaque élèment de la boucle, nous affichons une virgule ({", "}). Nous trions par date de début : ceci servira plus loin lors de l’affichage des données sans Javascript.
    • l. 3-5 pour sélectionner les évènements, nous utilisons le critère agendafull. Les options de ce critère nous indique :
      • date_debut : que le champ date_debut servira pour repérer … date de début de sélection.
      • date_fin : que le champ date_fin servira pour repérer … date de fin de sélection.
      • periode que la période sélectionné sera déterminée par les options suivantes.
      • #VAL{Y}|date{#ENV{start}}, #VAL{m}|date{#ENV{start}},     #VAL{d}|date{#ENV{start}} que le début de la période correspond à la date passée dans #ENV{start}. La syntaxe un peu absconse que vous voyiez issu permet d’extraire, respectivement, l’année, le mois et la jour depuis un timestamp.
      • #VAL{Y}|date{#ENV{end}}, #VAL{m}|date{#ENV{end}}, #VAL{d}|date{#ENV{end}}</cpde> que la fin de la période correspond à la date passée dans <code>#ENV{end}.
  • l. 7-14 : nous remplissons un tableau SPIP via #ARRAY, puis nous le transformons en objet JSON, via le filtre ||json_encode. Ce tableau comprend les entrées suivantes :
    • id : identifiant unique pour FullCalendar. Ca tombe bien, SPIP attribut un identifiant à chaque évenement : #ID_EVENEMENT
    • title : le titre. On transforme les entité HTML en caractère unicode (|html2unicode) puis on s’assure de proposer des données avec le bon charset (|unicode2charset).
    • allDay : on précise si l’évènement dure toute la journée. Utilisée pour l’affichage par jour. Pour préciser cela, on s’appuie sur le champ #HORAIRE qui contient justement cette information. On utilise #EVAL pour indiquer qu’on insére une valeur booléenne et non pas textuelle.
    • start : date de début. On garde le format SQL.
    • end : date de fin. On garde le format SQL.
    • url : lien. Pour le coup, on renvoie vers l’article.
    • description : description de l’évènement. Là encore, on converti en Unicode, puis dans le charset correct.

À noter que l’on pourrait définir d’autres données pour chaque évènement : on se refera à la documentation de l’objet Event de FullCalendar. Par exemple, on pourrait indiquer des classe HTML en fonction de la rubrique.

Et pour les personnes sans Javascript ?

Et oui, tout le monde n’a pas de Javascript. Comment on fait alors ? La solution consiste à afficher un calendrier sous forme de liste dans un div dont l’id est calendrier-loading. Si Javascript est activé, FullCalendar va masquer ce div.

Comme on a déjà fabriqué une boucle dans le squelette agenda.json.html, nous allons nous en reservir, afin d’éviter de dupliquer les critères. Pour ce faire, nous allons utiliser la boucle DATA de SPIP 3.

Nous mettons donc dans le squelette agenda.html :

  1. <B_agenda>
  2. <div id="calendrier-loading">
  3. <p class="pagination">#PAGINATION</p>
  4. <BOUCLE_agenda(DATA){source json, #PRODUIRE{fond=agenda.json, start=0,end=2147483647,_=#REM|time}}{pagination 15}>
  5.     <dl>
  6.         [<dt><:agenda:evenement_titre:></dt>
  7.         <dd><a href="#VALEUR{url}">(#VALEUR{title})</a></dd>]
  8.        
  9.         [<dt><:agenda:evenement_date:></dt>
  10.         <dd>(#VALEUR{start}|Agenda_affdate_debut_fin{#VALEUR{end},#VALEUR{allDay}|=={true}|?{non,oui}})</dd>]
  11.        
  12.         [<dt><:agenda:evenement_descriptif:></dt>
  13.         <dd>(#VALEUR{description})</dd>]
  14.     </dl>
  15. </BOUCLE_agenda>
  16. <p class="pagination">#PAGINATION</p>
  17. </div>
  18. </B_agenda>
  • l. 1-3 : partie optionnelle avant de la boucle, avec la pagination éventuelle.
  • l. 4 : code de la boucle. Nous bouclons sur des données ((DATA)) au format json ({source json) extrait du fichier produit (#PRODUIRE) par le squelette agenda.json.html avec la valeur de start égale à 0, c’est à dire au 1 janvier 1970 à minuit, et la valeur end égale à 2147483647, c’est à dire à la date maximale gérée par les ordinateurs actuel, le 19 janvier 2038, 3h14m7s [1]. Ainsi, nous sommes sûr de récuperer tout les évènements de l’agenda. L’option _=#REM|time permet de s’assurer de ne pas avoir de cache, puisque nous passons comme argument le moment d’appel (|time). Nous paginons de 15 en 15.
  • l. 5-14 : nous affichons les données pour chaque évènement, via #VALEUR{donne}. Ces données sont tirées du JSON.
  • l. 16 et suivante ; partie optionelle arrière de la boucle.

On obtient alors un agenda, certe sommaire, mais au moins existant sans Javascript :

PNG - 27.2 ko
Agenda pour les personnes sans Javascript

Conclusion

Vous voilà maintenant prêt à avoir un agenda avec FullCalendar. Bien sûr, il y aurait beaucoup de chose à améliorer, cependant cet article aborde déjà beaucoup de notions :
-  produire du JSON avec SPIP.
-  le formatage de FullCalendar.
-  les boucles DATA.

Notes

[1Voir l’article sur le bug de l’an 2038.

Retour en haut de la page

Vos commentaires

  • Le 25 février à 23:04, par Tropicaloo En réponse à : SPIP 3, Agenda et FullCalendar

    Bonsoir,

    Je cherche à afficher également les annonces, les penses-bête et les messages internes pour un calendrier en accès restreint côté public.
    Quelles sont les balises, boucles, etc pour les annonces et penses-bête à mettre dans un agenda.json.html ? Je n’ai pour le moment rien trouvé sur les différents sites de SPiP sur les annonces et penses-bête.
    Merci pour votre aide.

    • Le 25 février à 23:12, par Maïeul En réponse à : SPIP 3, Agenda et FullCalendar

      la boucle est spip_messages (voir tester MESSAGES, sans garanti).

      Les balises disponibles sont :

      #ID_MESSAGE
      #TITRE
      #TEXTE
      #TYPE
      #DATE_HEURE
      #DATE_FIN
      #RV
      #STATUT
      #ID_AUTEUR
      #MAJ
      #DESTINATAIRES

      et les critères correspondant.

    • Le 25 février à 23:17, par Tropicaloo En réponse à : SPIP 3, Agenda et FullCalendar

      Maïeul, merci beaucoup !

    Répondre à ce message

  • Le 22 janvier à 23:33, par Jean Christophe Villeneuve En réponse à : SPIP 3, Agenda et FullCalendar

    Hello

    Un exemple pour colorier les évènements en fonctions d’un mot clé.
    L’idée est de définir des mots-clés dans un groupe dédié avec les noms qu’on veut et de mettre une couleur dans le descriptif du mot-clé.
    Puis de récupérer la valeur de ce descriptif pour colorer les évènements de l’agenda.
    Si l’évènement à un mot-clé du groupe dédié (exemple Agenda_couleur), cette couleur est mise en fond, sinon, on met une couleur par défaut (grey par exemple).
    Et hop !

    #HTTP_HEADER{Content-type:text/javascript;}
       [<BOUCLE_evenements(EVENEMENTS){', '}{par date_debut}{titre_mot?}
       {agendafull date_debut,date_fin, periode,
               #VAL{Y}|date{#ENV{start}}, #VAL{m}|date{#ENV{start}}, #VAL{d}|date{#ENV{start}},
               #VAL{Y}|date{#ENV{end}}, #VAL{m}|date{#ENV{end}}, #VAL{d}|date{#ENV{end}}}
         >
       <BOUCLE_mot(MOTS){id_evenement}{type=Agenda_couleur}>
       [(#ARRAY{
       id,#ID_EVENEMENT,
       title,[(#_evenements:TITRE|html2unicode|unicode2charset)],
       allDay,[(#HORAIRE|=={non}|?{#EVAL{true},#EVAL{false}})],
       start,#DATE_DEBUT,
       end,#DATE_FIN,
       url,#URL_EVENEMENT,
       color,[(#DESCRIPTIF|PtoBR|html2unicode|unicode2charset)]
       }|json_encode)]
       </BOUCLE_mot>
       [(#ARRAY{
       id,#ID_EVENEMENT,
       title,[(#_evenements:TITRE|html2unicode|unicode2charset)],
       allDay,[(#HORAIRE|=={non}|?{#EVAL{true},#EVAL{false}})],
       start,#DATE_DEBUT,
       end,#DATE_FIN,
       url,#URL_EVENEMENT,
       color,grey
       }|json_encode)]
       <//B_mot>
       </BOUCLE_evenements>]

    Une question, à quoi sert le
    description,[(#DESCRIPTIF|html2unicode|unicode2charset)]
    proposé dans l’exemple de cet article ?

    • Le 22 janvier à 23:42, par Jean Christophe Villeneuve En réponse à : SPIP 3, Agenda et FullCalendar

      En fait ça fonctionne avec
      [(#DESCRIPTIF*)]
      ou
      [(#DESCRIPTIF|PtoBR|html2unicode|unicode2charset)]
      ou même
      [(#DESCRIPTIF|PtoBR)]

      C’est quoi le mieux ?

    • Le 22 janvier à 23:50, par Maïeul En réponse à : SPIP 3, Agenda et FullCalendar

      [(#DESCRIPTIF*)] n’est pas à utilisez, car cela signifie que les raccourcis typographiques ne sont pas interprétés, et donc qu’on peut se retrouver avec des accolades.

      [(#DESCRIPTIF|PtoBR)] interpréte les raccourcis, puis transforme les changement de paragraphes rupture de ligne. Pas mal, mais le problème est qu’on a des caractères accentués sous forme d’entités html, ce qui posera pb dans l’interprétation du js.

      [(#DESCRIPTIF|PtoBR|html2unicode|unicode2charset)] transforme les entités html en caractère unicode, puis fait éventuellement la conversion vers le charset du site -> la meilleure solution

    • Le 23 janvier à 08:22, par Jean Christophe Villeneuve En réponse à : SPIP 3, Agenda et FullCalendar

      Ok je vais suivre tes conseils avisés.

      Et le rôle de
      description,[(#DESCRIPTIF|html2unicode|unicode2charset)] ?

    • Le 23 janvier à 10:30, par Maïeul En réponse à : SPIP 3, Agenda et FullCalendar

      simplement indiqué qu’elle est la description de l’evt. Je comprend pas le pb

    • Le 23 janvier à 12:45, par Jean Christophe Villeneuve En réponse à : SPIP 3, Agenda et FullCalendar

      ça doit afficher le descriptif quelque part ? si oui, où ?
      Car je ne le vois pas apparaitre dans l’agenda alors que j’ai des évènements avec un descriptif.

    • Le 23 janvier à 14:09, par Maïeul En réponse à : SPIP 3, Agenda et FullCalendar

      aucune idée, il faut regarder je pense dans la doc de fullcalendar il doit y avoir des détails

    • Le 23 janvier à 15:51, par Jean Christophe Villeneuve En réponse à : SPIP 3, Agenda et FullCalendar

      C’est ce que je viens justement de faire. D’après ce que j’en ai compris, on doit pouvoir faire apparaitre ce descriptif dans une infobulle avec du javascript. Mais c’est un peu trop trapu pour moi. Ce serait sympa si c’était intégré dans Agenda ...

      Autre question : j’essaye de jouer avec la couleur du texte en rajoutant textColor,red dans le premier array et textColor,green dans le 2e mais tout les évènements se retrouvent écrits en rouge. L’idée est de jouer ensuite avec les filtres couleur_extreme et couleur_inverser

      Une idée ?

      #HTTP_HEADER{Content-type:text/javascript;}
         [<BOUCLE_evenements(EVENEMENTS){', '}{par date_debut}{titre_mot?}
         {agendafull date_debut,date_fin, periode,
                 #VAL{Y}|date{#ENV{start}}, #VAL{m}|date{#ENV{start}}, #VAL{d}|date{#ENV{start}},
                 #VAL{Y}|date{#ENV{end}}, #VAL{m}|date{#ENV{end}}, #VAL{d}|date{#ENV{end}}}
           >
         <BOUCLE_mot(MOTS){id_evenement}{type=Agenda_couleur}{0,1}>
         [(#ARRAY{
         id,#ID_EVENEMENT,
         title,[(#_evenements:TITRE|html2unicode|unicode2charset)],
         allDay,[(#HORAIRE|=={non}|?{#EVAL{true},#EVAL{false}})],
         start,#DATE_DEBUT,
         end,#DATE_FIN,
         url,#URL_EVENEMENT,
         color,[(#DESCRIPTIF|PtoBR|html2unicode|unicode2charset)],
         textColor,red
         }|json_encode)]
         </BOUCLE_mot>
         </B_mot>
         [(#ARRAY{
         id,#ID_EVENEMENT,
         title,[(#_evenements:TITRE|html2unicode|unicode2charset)],
         allDay,[(#HORAIRE|=={non}|?{#EVAL{true},#EVAL{false}})],
         start,#DATE_DEBUT,
         end,#DATE_FIN,
         url,#URL_EVENEMENT,
         color,#336699,
         textColor,green
         }|json_encode)]
         <//B_mot>
         </BOUCLE_evenements>]
    • Le 23 janvier à 15:55, par Maïeul En réponse à : SPIP 3, Agenda et FullCalendar

      il faut regarder ce que donne concrètement le fichier .js produit pour voir où se trouve le couac.

      Quand à intégrer à Agenda, c’est deja intégré. Le pb est d’intégrer dans full calendar, et ça et bien il faut lire la doc...

    • Le 24 janvier à 10:35, par Jean Christophe Villeneuve En réponse à : SPIP 3, Agenda et FullCalendar

      Vu mon niveau en js et en anglais, je crois que ça va attendre un peu ;-)

    • Le 19 février à 12:28, par  ??? En réponse à : SPIP 3, Agenda et FullCalendar

      Bonjour à vous tous et merci pour vos différents commentaires qui aident bcp,
      J’aimerai savoir s’il ya possibilité de coloré les évènements SANS les mots clés, juste au niveau du css ?? Je m’explique, j’ai une rub agenda et deux sous rubrique (ssrub1 et ssrub2) et les évènements sont dans les articles des sous rub. L’idée est d’avoir
      1/ un fullcalendar qui affiche tous les évènements (ssrub1 et ssrub2) coloré en fonction des sousrubrique

      2/ Ensuite afficher le fullcalendar pour chaque sous rubrique et biensure on aura cette fois une seule couleur

      J’ai fais des boucles pour modifier mais rien ne marche. Merci de votre aide

    • Le 19 février à 18:41, par  ??? En réponse à : SPIP 3, Agenda et FullCalendar

      Bonjour,
      J’ai réussi à faire ce que je voulais, mais mon problème où je peux placer mon class=toto pour jouer ensuite avec le css. Voici ma boucle :

      #HTTP_HEADER{Content-type:text/javascript;}
        [<BOUCLE_evenements(EVENEMENTS){', '}{par date_debut}{titre_mot?}
        {agendafull date_debut,date_fin, periode,
                #VAL{Y}|date{#ENV{start}}, #VAL{m}|date{#ENV{start}}, #VAL{d}|date{#ENV{start}},
                #VAL{Y}|date{#ENV{end}}, #VAL{m}|date{#ENV{end}}, #VAL{d}|date{#ENV{end}}}
          >
        <BOUCLE_mot(MOTS){id_evenement}{type=Agenda}>
        [(#ARRAY{
        id,#ID_EVENEMENT,
        title,[(#_evenements:TITRE|html2unicode|unicode2charset)],
        allDay,[(#HORAIRE|=={non}|?{#EVAL{true},#EVAL{false}})],
        start,#DATE_DEBUT,
        end,#DATE_FIN,
        url,#URL_ARTICLE,
        color,[(#DESCRIPTIF|PtoBR|html2unicode|unicode2charset)]
        }|json_encode)]
        </BOUCLE_mot>
        </BOUCLE_evenements>]
    • Le 19 février à 20:13, par Maïeul En réponse à : SPIP 3, Agenda et FullCalendar

      d’après la documentation de full calendar je ne vois pas d’endroit où préciser la classe ...

    Répondre à ce message

  • Le 16 janvier à 11:37, par Eric En réponse à : SPIP 3, Agenda et FullCalendar

    Bonjour,

    Les événements ne s’affichent pas dans le calendrier-mini avec calendrier_mini_event.json mais les articles, par contre, s’affichent correctement avec calendrier_mini.json

    Je ne vois pas quels paramètres j’aurais pu omettre ?

    J’utilise en local spip SPIP 3.0.5 [19905] et les plugins Agenda 3.11.2 - Mini Calendrier 2.3.4

    Voici le code que j’insère dans mon fichier sommaire.html :

    [(#CALENDRIER_MINI{#ENV{date},
    'date',
    #URL_PAGE{calendrier},
    #URL_PAGE{calendrier_mini_event.json}})]

    Toute aide est la bienvenue, merci :-)

    Répondre à ce message

  • Le 17 janvier à 15:39, par ChristopheD En réponse à : SPIP 3, Agenda et FullCalendar

    Bonjour

    Un grand merci pour votre contribution, dont je me suis largement inspiré pour réaliser un calendrier récapitulant différents événements stockés dans ma base - la différence majeure est que je n’ai pas utilisé le plugin « événements », mais directement les articles, en récupérant leur date de publication et leur date de rédaction antérieure (considérée pour les besoins de la cause comme la date de fin des évènements).

    Tout va pour le mieux... hormis un détail qui coince tout : les évènements sont invisibles pour les visiteurs, et n’apparaissent que pour ceux qui se sont authentifiés sur le site (webmestre ou administrateurs).

    Vérification faite, pour les visiteurs, ce sont les différents fichiers xxxx.json.html qui sont inaccessibles (un lien vers eux retourne une page « agenda/xxx.json.html : accès interdit ».

    Une idée qui me sauverait la vie ?

    • Le 18 janvier à 14:29, par ChristopheD En réponse à : SPIP 3, Agenda et FullCalendar

      Bon, j’ai résolu le problème sans piger son origine, simplement en changeant les fichiers incriminés de répertoire...

    Répondre à ce message

  • Le 26 septembre 2012 à 18:31, par Mib68 En réponse à : SPIP 3, Agenda et FullCalendar

    Bonjour dans le calendrier généré est il possible de faire afficher une infobulle (qui aparait lors d’un clic sur un évennement) comme celle qui s’affiche sur les agenda google. Avec le titre de l’évenement le lieu ect, ...

    Coordialement

    • Le 26 septembre 2012 à 19:39, par Maïeul En réponse à : SPIP 3, Agenda et FullCalendar

      Bonjour,

      encore une fois cela depend de FullCalendar et non pas de SPIP stricto sensu. Je vous invite donc à lire la documentation de FulLCalendar

    • Le 14 novembre 2012 à 13:00, par Patrick En réponse à : SPIP 3, Agenda et FullCalendar

      Regarde ici http://contrib.spip.net/Squelette-d... c’est peut être une piste. Il y a des infobules effectivement qui s’affichent au survol, avec possibilité de présenter une image si elle a été placée dans le descriptif.
      NB : le plugin agenda est aussi nécessaire, l’affichage ne fait pas appel à fullcalendar mais à l’agenda privé ce spip, moins « fun » à mon gout.

    • Le 15 décembre 2012 à 08:16, par Patrick En réponse à : SPIP 3, Agenda et FullCalendar

      Bonjour,
      En plaçant ceci

      eventMouseover : function(event)
      // opens events in a popup window
      window.open(event.url, ’agendaevent’, ’width=850,height=700’) ;
      return false ;
      ,

      sous

      events : « [(#URL_PAGEagenda.json)] »,

      dans agenda.html, j’ai une pop up qui s’ouvre, j’aurais aimé une tooltip, mais..
      Cette pop up contient l’article cible et non le desciptif de l’évènement.
      Ce n’est pas le top, mais on avance.
      Je soumets.
      A+

    • Le 18 décembre 2012 à 20:55, par Mib68 En réponse à : SPIP 3, Agenda et FullCalendar

      Bonjour patrick,

      en placant le code à l’endroit dont tu parle je n’obtien rien du tout

      a++

    • Le 19 décembre 2012 à 07:28, par Patrick En réponse à : SPIP 3, Agenda et FullCalendar

      Excuses, je n’ai pas recopié tout le code...

      eventMouseover : function(event)
      // opens events in a popup window
      window.open(event.url, ’agendaevent’, ’width=850,height=700’) ;
      return false ;
      ,


      Deux ennuis avec ce code que j’ai abandonné :
      -  il renvoie sur l’article cible et non sur le descriptif de l’évènement (ce qu’on obtient en un clic sans ce bout de code, peut être changer le json de mouseover et au lieu de ).
      -  il ouvrira autant de pop ups que tu as survolé de lignes sur ta page agenda, sauf si on passe par le côtés de l’agenda pour ne survoler qu’une ligne d’évènement (les explications au visiteur risquent d’être cocasses).
      Tiré du zip démos du site officiel et des descriptifs de event.
      Je n’ai pas le temps de voir s’il existe un mouse out pour fermer le pop up.
      A++Patrick

    • Le 19 décembre 2012 à 16:59, par Patrick En réponse à : SPIP 3, Agenda et FullCalendar

      eventMouseover : function(event)
      // opens events in a popup window
      window.open(event.url, ’survolevent’, ’width=850,height=700’) ;
      return false ;
      ,
      eventMousout : function(event)
      // opens events in a popup window
      window.close(event.url, ’survolevent’, ’width=0,height=0’) ;
      return false ;
      ,


      permet (si on passe doucement sur l’évènement) de passer d’un évènement à un autre, mais la fenêtre reste ouverte à la fin...

    • Le 17 janvier à 15:31, par ChristopheD En réponse à : SPIP 3, Agenda et FullCalendar

      Bonjour

      Pour programmer des infos-bulles sur des événements de calendrier, j’ai utilisé le plugin jquery qtip. C’est (assez) simple et ça marche très bien.

    Répondre à ce message

  • Le 27 décembre 2012 à 17:40, par Serge En réponse à : SPIP 3, Agenda et FullCalendar

    Bonjour,

    Est-ce qu’il-y-a un astuce ou un petit plugin qui permet de répéter un evement de manière hebdomadaire ?

    La seule possibilité que j’ai trouvé c’est de le faire manuellement avec l’inconvénience que la date de l’événement ne change pas et les répétitions réferent toujours à l’événement « mère ».

    Quelqu’un connait une meilleure solution ?

    Merci pour l’aide
    Serge du Luxembourg

    • Le 2 janvier à 13:39, par Maïeul En réponse à : SPIP 3, Agenda et FullCalendar

      Salut et bonne année. La question ne concerne pas cette contrib (affichage du calendrier) mais celle sur le plugin agenda (entrée des données).

      Je vous invite à la reposer sur le forum ad hoc Plugin Agenda

    Répondre à ce message

  • Le 16 décembre 2012 à 01:00, par DD En réponse à : SPIP 3, Agenda et FullCalendar

    Bonjour,

    Je découvre juste cette nouvelle manière d’afficher les événements, et je ne comprends pas l’affichage obtenu :

    J’utilise ZPIP et j’ai donc mis la page agenda.html et agenda.jason.html dans /squelettes/contenu

    j’obtiens un mini calendrier dans la colonne « navigation » à droite de la page : il contient bien les événements du site.
    Mais dans la partie centrale de la même page j’obtiens « Aucun événement ».

    Si je mets les 2 fichiers dans /squelettes/ il n’y a que la version sans javascript qui s’affiche.

    Merci de vos lumières.

    dd

    PS dans l’explication ci-dessus il est écrit « Dans cet article nous manipulons deux fichiers squelettes : article.html (qui contient le code nécessaire à l’affichage du calendrier). »

    est-ce que e n’est pas plutôt agenda.html ?

    • Le 18 décembre 2012 à 17:30, par DD En réponse à : SPIP 3, Agenda et FullCalendar

      OK je me réponds, j’aurais du y penser :
      avec zpip la page est page-agenda.html dans squelettes/contenu et le fichier agenda.json.html est lui à placer dans squelettes/

      dd

    Répondre à ce message

  • Le 7 décembre 2012 à 12:19, par Chaumel En réponse à : SPIP 3, Agenda et FullCalendar

    Bonjour et bravo pour les détails.
    Je ne suis pas très bon en programmation, j’en ai jamais fait.
    Je travaille en local avec Wamp pour transposer un site existant, et faire des améliorations.
    Je suis sous Spip 3.0.5 Sarka 3.2.10, j’utilise les plugins calendrier_mini 2.0 et Agenda 3.5 pour facilités la tenu à jour d’un agenda d’événements répétitifs qui n’ont pas besoin de grande explication.
    J’ai mis en place, tel que vous le proposez et cela fonctionne correctement, j’ai le mini calendrier qui affiche les événements et la page agenda qui affiche également, mais tout en bleu.
    J’ai 5 catégories d’évènements que j’ai mis dans 5 articles. J’ai créé un groupe mot-clé Couleur_agenda et les mot-clé : Rouge, vert, Or, Bleue, Mauve.
    J’arrive là où je ne sais plus faire : j’ajoute une BOUCLE_mot, comme proposé dans le json. Que dois-je mettre pour que le choix de mes couleurs, s’affiche avec la couleur, bien sûr après je dois avoir mon CSS, cela je dois arrivé à le faire.
    Je n’ai pas trouvé de solution dans l’utilisation des balises et filtres. Merci de votre aide.

    Répondre à ce message

  • Le 3 décembre 2012 à 22:05, par ChristopheD En réponse à : SPIP 3, Agenda et FullCalendar

    Bonjour

    Un grand merci pour ce code, qui m’a permis d’avancer grandement. Il me manque encore un élément : je souhaite transmettre à ma page agenda.html (et au script qui s’y trouve) un certain nombre de paramètres supplémentaires correspondant à différents champs des articles de départ (sous-titre, texte, voire image jointe).

    Or j’ai beau tout essayer, la transmission ne s’effectue pas. Sans doute cela a-t-il à voir avec le mystérieux « paramètre_url » dont vous semblez dire qu’il est là pour ça. Mais je ne pige pas où je suis censé le passer, et sous quelle forme. Pouvez-vous m’en dire un peu plus ?

    Désolé pour le dérangement et merci d’avance...

    • Le 4 décembre 2012 à 01:26, par Maïeul En réponse à : SPIP 3, Agenda et FullCalendar

      Je pense que vous souhaitez passer l’nformation non pas à agenda.html mais à l’affichage de l’agenda.

      Ou alors votre page agenda.html est spécifique à un article ?

      dans tout les cas, il me faut préciser votre besoin, là je ne suis pas sûr de pouvoir vous répondre correctement

    • Le 4 décembre 2012 à 07:23, par ChristopheD En réponse à : SPIP 3, Agenda et FullCalendar

      Je vais tâcher d’être plus précis (au risque de dire une ou deux âneries supplémentaires).
      Le but est de réaliser des infos-bulles dans le calendrier, spécifiques à chaque évènement, et comportant pour cela des informations contenues dans divers champs des articles qui sont à la base de ces évènements. Donc, il s’agit bien de transmettre ces infos au calendrier - mais celui-ci étant conçu par un script se trouvant sur la page agenda.html, il me semblait (à tort ?) que le problème revenait à transmettre ces informations au squelette lui-même.
      Est-ce plus clair à présent ?
      Merci de votre aide !

    • Le 4 décembre 2012 à 12:16, par Maïeul En réponse à : SPIP 3, Agenda et FullCalendar

      je crois qu’effectivement vous n’avez pas compris le principe de l’agenda sous spip 3.

      J’ai un fichier agenda.html, celui ci va appeler des scripts jquery pour afficher un agenda. Les élèments à afficher dans cette agenda (date, titre etc.) sont pour leur parts issues du fichier json calculé par le squelette agenda.json.html (vous remarquerez que c’est à l’intérieur de ce squelette que ce situe les boucles agenda...

      Donc c’est à l’intérieur de agenda.json.html que vous devriez selectionner les infos à afficher dans l’agenda.

      Dans le cas présent, je suppose que le plus « correcte » serait de mettre les infos tirés des articles dans la partie « description ».

      C’est à dire remplacer le contenu de la ligne 11 du code suivant (repris de l’article)

      1. #HTTP_HEADER{Content-type:text/javascript;}
      2. [<BOUCLE_evenements(EVENEMENTS){', '}{par date_debut}  
      3. {agendafull date_debut,date_fin, periode,
      4.         #VAL{Y}|date{#ENV{start}}, #VAL{m}|date{#ENV{start}},     #VAL{d}|date{#ENV{start}},
      5.         #VAL{Y}|date{#ENV{end}}, #VAL{m}|date{#ENV{end}}, #VAL{d}|date{#ENV{end}}}
      6.         >
      7.                                         [(#ARRAY{id,#ID_EVENEMENT,
      8. title,[(#TITRE|html2unicode|unicode2charset)],
      9. allDay,[(#HORAIRE|=={non}|?{#EVAL{true},#EVAL{false}})],
      10. start,#DATE_DEBUT,
      11. end,#DATE_FIN,
      12. url,#URL_ARTICLE,
      13. description,[(#DESCRIPTIF|html2unicode|unicode2charset)]}|json_encode)]
      14. </BOUCLE_evenements>]

      Là méthode peut être de prendre le code suivant :

      1. #HTTP_HEADER{Content-type:text/javascript;}
      2. [<BOUCLE_evenements(EVENEMENTS){', '}{par date_debut}  
      3. {agendafull date_debut,date_fin, periode,
      4.         #VAL{Y}|date{#ENV{start}}, #VAL{m}|date{#ENV{start}},     #VAL{d}|date{#ENV{start}},
      5.         #VAL{Y}|date{#ENV{end}}, #VAL{m}|date{#ENV{end}}, #VAL{d}|date{#ENV{end}}}
      6.         >
      7. <BOUCLE_article(ARTICLES){id_evenement}>
      8.                                         [(#ARRAY{id,#ID_EVENEMENT,
      9. title,[(#_evenements:TITRE|html2unicode|unicode2charset)],
      10. allDay,[(#HORAIRE|=={non}|?{#EVAL{true},#EVAL{false}})],
      11. start,#DATE_DEBUT,
      12. end,#DATE_FIN,
      13. url,#URL_ARTICLE,
      14. description,[(#TEXTE|html2unicode|unicode2charset)]}|json_encode)]
      15. </BOUCLE_article>
      16. </BOUCLE_evenements>]

      Explication de code :
      -  l. 7 on récupere l’article de l’évenement
      -  l. 9 on veut le titre de l’evenement, et non pas le titre de l’article (cf http://programmer.spip.net/Contenu-de-boucles-parentes)
      -  l. 14 on on récupere le texte de l’article.

      J’ignore complètement comment s’affiche ce qui est passé comme « description ». Il faut regarder du côté de la doc de full calendar pour voir comment avoir des infos bulles

    • Le 5 décembre 2012 à 11:23, par ChristopheD En réponse à : SPIP 3, Agenda et FullCalendar

      Hem. En fait, j’avais bien compris que c’était depuis agenda.json.html que je devais envoyer les bonnes infos. En fait, j’ai enfin tilté : ce qui coinçait, c’est que j’essayais de récupérer les champs de mes articles... au travers d’une boucle évènement. Forcément, ça ne pouvait pas marcher. On est peu de chose...
      En attendant, merci à vous pour le coup de main !

    Répondre à ce message

  • Le 12 novembre 2012 à 14:47, par Patrick En réponse à : SPIP 3, Agenda et FullCalendar

    Bonjour,
    Merci !
    J’ai suivi le pas à pas depuis le début, collé les lignes de code comme expliqué, tout a marché tout de suite, alors que j’ai essayé une autre solution sans succès depuis hier, tout cela sur un spip 3.05 en local.
    C’est tout à fait par hasard que je suis tombé sur votre article, en recherchant le plugin full calendar que j’ai mis en ligne avec une version 2.1.15 .
    L’appel aux évènements est un plus et à mon sens plus facile à gérer que par le plugin.
    Problème, lorsque l’on veut toucher aux css du calendrier, il faut toucher au plugin-dist, qui effacera la modification à la prochaine mise à jour.
    Je suppose que l’appel à la css doit changer si on veut la sauvegarder et la conserver ?
    Quoiqu’il en soit, encore merci.
    A+Patrick

    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

  • GIS 4

    11 août 2012 – 295 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 (...)

  • Des blocs dépliables

    6 janvier 2008 – 410 commentaires

    Cet outil du Couteau Suisse vous permet de créer des blocs dont le titre cliquable peut rendre un contenu visible ou invisible, voire de les munir d’une adresse pour que le bloc visible soit récupéré en AJAX. Ces blocs sont disponibles dans tous vos (...)

  • Métas

    8 août 2009 – 46 commentaires

    Ce petit plugin permet l’ajout, depuis l’espace privé, de metatags aux articles et rubriques de SPIP, ainsi que la mise en exergue de mots importants.

  • Des jeux dans vos articles !

    9 décembre 2006 – 490 commentaires

    Le plugin « Jeux » permet d’insérer dans vos articles des jeux ou des exercices de toute sorte.

  • La Fabrique

    20 avril 2012 – 134 commentaires

    La Fabrique est un outil pour webmestres ou développeurs qui souhaitent créer des plugins. La Fabrique est capable de générer le code source minimal d’un plugin pour SPIP 3 (elle accélère donc le démarrage d’un plugin) et peut s’occuper également de (...)