Calendrier Mini 2.0

Ce plugin ajoute la balise #CALENDRIER_MINI qui insère un petit widget de navigation par mois dans les dates des évènements.

Fonctionnement du mini calendrier

Le mini calendrier présente un mois à la fois. Les jours du mois comportant des évènements sont surlignés. Un clic sur l’un de ces jours permet de naviguer vers une page qui présentera les évènements de ce jour.

Le mini calendrier comporte deux liens de navigation pour passer au mois précédent ou au mois suivant, ainsi que deux champs de sélection pour aller directement à n’importe quel autre mois ou année.

La navigation d’un mois à un autre se fait immédiatement, sans rechargement de la page. La liste des évènements pour le mois en cours est rechargée en tâche de fond et mise à jour sur le mini calendrier (chargement asynchrone au format JSON).

Les évènements affichés par le mini calendrier peuvent être de n’importe quelle nature (publication des articles du site, commentaires, objets évènements du plugin agenda).

A partir de la version 2.3.0, la liste des événements d’une journée est affichée au survol (tooltip).

Accessibilité et alternative
Le mini calendrier insère également une alternative qui permet aux utilisateurs sans javascript ainsi qu’aux robots d’indexation de disposer des liens vers chaque jour (pour peu qu’il contienne un évènement) du mois en cours ainsi que vers le mois précédent ou le mois suivant.

Insertion du mini calendrier

Le mini-calendrier est inséré simplement dans vos squelettes au moyen de la balise #CALENDRIER_MINI

Cette version 2.0 du plugin reprend la syntaxe des versions précédentes du plugin « Calendrier mini » : #CALENDRIER_MINI{url, url_json}

  • url désigne l’URL de la page sur laquelle envoyer le visiteur lorsqu’il clique sur un jour (#SELF par défaut)
  • url_json désigne l’URL appelée pour charger la liste en JSON des évènements entre deux dates (#URL_PAGE{calendrier_mini.json} par défaut).

Dans cette syntaxe courte, la variable date utilisée est nommée archives et la date courante est automatiquement capturée d’après #ENV{archives}.
Un exemple d’utilisation est :

#CALENDRIER_MINI{#SELF, #URL_PAGE{mes_evenements.json}}

Le plugin supporte également la syntaxe longue utilisée dans le plugin « Agenda » :
#CALENDRIER_MINI{date, var_date, url, url_json}

  • date est la valeur courante de la date ; le mini calendrier se positionnera sur le mois correspondant ;
  • var_date est le nom de la variable date qui sera passée en argument à la page appelée quand le visiteur clique sur un jour ;
  • url désigne l’URL de la page sur laquelle envoyer le visiteur lorsqu’il clique sur un jour (#SELF par défaut) ;
  • url_json désigne l’URL appelée pour charger la liste en JSON des évènements entre deux dates (#URL_PAGE{calendrier_mini.json} par défaut).

Un exemple d’utilisation de cette syntaxe est :

#CALENDRIER_MINI{#ENV{date}, date, #SELF, #URL_PAGE{evenements_mini.json}}

Exemple : afficher les évènements créés dans le plugin « Agenda »

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

Dans cet exemple :

  • on utilise le squelette « calendrier_mini_event.json.html » fourni par le plugin « Agenda » pour récupérer les évènements créés dans l’agenda ;
  • la page d’affichage des évènements lorsque l’on clique sur une date (avec au moins un évènement !) utilise le squelette « jour.html », lui aussi fourni dans le plugin « Agenda » ;
  • le squelette « jour.html » utilisant le paramètre d’environnement date pour boucler dans les évènements, on prend soin de passer date en 2e paramètre de la balise.

Liste des évènements

Les évènements affichés dans le mini-calendrier sont fournis au format JSON par un squelette qui est appelé à chaque changement de mois du mini calendrier.

Par défaut c’est calendrier_mini.json.html qui génère la liste des articles publiés entre start et end fournis tous deux au format « timestamp » (nombre de secondes depuis 1970) dans l’URL.

Pour modifier la liste des évènements affichés dans le mini calendrier, il suffit de modifier le squelette calendrier_mini.json.html (ou de le copier sous un autre nom en passant ensuite la valeur correspondante pour l’argument url_json).

Le title de chaque événement envoyé par le squelette sert à afficher le tooltip au survol de chaque date. Vous pouvez le personnaliser en le préfixant de l’heure de début par exemple, quand cela est pertinent.

Collecte automatique de id_article, id_rubrique et id_mot

Quand elle est utilisée avec la syntaxe sans l’url de la page JSON, la balise #CALENDRIER_MINI collecte automatiquement (comme elle le faisait auparavant) les #ID_ARTICLE, #ID_RUBRIQUE et #ID_MOT du contexte où elle est appelée. Les valeurs de id_article, id_rubrique et id_mot sont alors passées à l’url de la page JSON par défaut.

Dès que vous précisez en dernier argument de #CALENDRIER_MINI l’url de la page JSON qui fournit les événements, il vous appartient d’y préciser les id_article, id_rubrique ou id_mot que vous souhaitez prendre en compte, car ceux-ci ne sont plus transmis automatiquement.
Ce fonctionnement vous permet ainsi de désactiver la transmission automatique au besoin.

Personnalisation de l’apparence

L’apparence du mini-calendrier est prise en charge par la feuille de style css/minical.css. La feuille de style est minimale afin que le mini-calendrier hérite au maximum de l’apparence de votre site. Cette feuille de style peut être personnalisée dans votre dossier squelettes/.
Voici un autre exemple d’insertion du mini-calendrier sans modification de la feuille de style :

Pour des raisons de performance, la feuille de style est insérée inline dans le HTML de la page qui contient le mini calendrier. Si elle référence des images, celles-ci doivent donc être référencées avec leur URL absolue.

Les boutons pour passer vers les mois précédents ou suivants utilisent l’image css/img/month_prev_next-32x16.png qui peut être personalisée dans votre dossier squelettes/.

Le pied du mini-calendrier qui contient le bouton aujourd’hui peut-être masqué simplement en CSS.

En dernier recours, si c’est vraiment nécessaire pour la personnalisation, vous pouvez aussi modifier le squelette formulaires/calendrier_mini.html. Toutefois ceci est déconseillé car hypothèque la compatibilité de votre squelette avec les évolutions futures du plugin.

Discussion

113 discussions

  • Le titre ajouté au-dessus du mini-calendrier est imposé par le formulaire mini_calendrier.*
    Surcharger ce formulaire juste pour modifier le titre me semble un peu extrême.

    Est-ce que le titre (ou son absence) ne pourraitpas être un 5e argument de #CALENDRIER_MINI. Ou bien faut-il passer par un masquage CSS. Mais ça signifie alors que le code HTML aura les deux titres, ce qui n’est pas terrible.

    NB : le filtre replace ne peut être appliquer sur #CALENDRIER_MINI car #FORMULAIRE_CALENDRIER_MINI est inclu dynamiquement.

    Répondre à ce message

  • Est-il possible de pouvoir aller directement à l’URL d’un objet ?

    Je m’explique, le json que l’on passe au mini_calendrier contient l’URL associée à chaque entrée du calendrier. S’il n’y a qu’une seule entrée pour un jour donné, je souhaiterai que le clic ammène directement sur cette URL, et n’utilisez #URL_PAGEjour (3e paramètre de #CALENDRIER_MINI que pour les jours ayant au moins deux entrées).

    Cordialement

    Répondre à ce message

  • 2

    Bonjour,

    Depuis la révision 66284 , le mini calendrier provoque une erreur javascript sur le mini-calendrier qui n’affiche pas les événement du coup.

    Le bug est reproduit sur 2 sites avec spip 3.0.5, agenda 3.9.3 et Mini Calendrier 2.3.3.
    Et ScolaSPIP (est-ce lié ? avant ça fonctionnait bien)
    Sous firefox 15 et Chrome.

    Voir par exemple sur http://www.clg-moulin-lanorville.ac-versailles.fr/

    Si je reviens en arrière sur la révision 66284 du fichier javascript/calendrier_mini.js.html l’erreur js disparait et le mini calendrier s’affiche bien. C’est ce que j’ai fait ici : http://www.tice.ac-versailles.fr/scolaspip/

    Johan

    Répondre à ce message

  • 5

    Bonjour,
    Une question sur un problème que je n’arrive pas à résoudre pour ce mini calendrier (Spip en 3.0.5 et Agenda et Mini calendrier à jour).

    J’arrive à afficher mon mini-calendrier, et j’utilise calendrier_mini_event.json pour essayer de passer à chaque évènement un classname qui dépend d’un mot-clé.

    Apparemment la fabrication du json marche puisque par exemple j’ai bien dans le title le titre de mon évènement. Par contre je n’arrive pas à avoir le nom de ma classe (qui est en fait le titre du mot-clé) appraitre soit dans le a soit dans le td (j’ai tout testé je crois).

    Cette méthode est proposée ici : http://contrib.spip.net/SPIP-3-Agenda-et-FullCalendar dans les commentaires, par contre il n’est pas dit si elle peut s’appliquer au mini calendrier. Ce que je pensais faisable puisque on parle bien du paramètre classname ici : http://contrib.spip.net/Calendrier-SPIP-3 (Cedric). Par contre le mini calendrier est différent de full calendar dans le nom des classes (il y a des fc.*... pour full calendar).

    Donc ma question est de savoir si cela est possible, si classname est vraiment passé / appliqué.

    Une question auxiliaire : y-a-t-il une méthode simle pour afficher le json produit ? genre print_r en PHP ?

    Merci.
    Pierre.

    • Bonjour : actuellement les classes fournies par le json ne sont pas transmises au mini calendrier, mais je crois que c’est une évolution possible.

      Pour afficher le json, il faut utiliser une extension comme firebug qui permet de voir les requetes ajax faites par le navigateur, et d’ouvrir l’url du json dans un nouvel onglet. C’est le plus simple.

    • Si j’avais été malin j’aurai posée la question plus tôt ça m’aurait éviter d’essayer ça pendant une aprem ... Quand tu dis « évolution possible » ... c’est dans les tuyaux ou c’est un projet à plus long terme ? (faut que je trouve une soluce, j’ai promis ça sur la base de l’Agenda précédent ou j’arrivais à faire ça) ..
      Merci en tous cas !

    • Bonjour,
      Bon j’ai décidé d’être plus malin que l’informatique : j’ai remplacé mon calendrier mini par le full calendar du plugin Agenda ramené à une taille ... mini. Et ça marche plutot bien et je peux afficher plusieurs évènements sur une même journée avec chacun des couleurs dépendant de mots-clés. Et pour perfectionner le tout, je coupe la longueur des titres en fonction du nombre de jours :-)
      En tous cas, merci pour ces 2 super plugins qui déchirent !
      P.

    • C’est une alternative possible, en effet.

      Sinon, pour info, le calendrier mini doit maintenant propager les classes du json sur les cases de chaque jour à partir de la version 2.3.3 (et version 3.9.3 du plugin agenda)

    • Aahhh ... l’informatique a encore gagné !! Merci pour la réactivité, mais pour l’instant je suis plutôt très satisfait de mon fullcalendar qui fait très iCal. Je mettrai un lien vers ce site quand il sera public. J’ai aussi réussi à ajouter un tooltip sur chaque évnement pour avoir l’horaire et le titre non coupé ...
      Merci, ce travail me servira de toutes façons sur d’autres sites ou j’ai des mini-calendriers sur des spip 2.1 que je vais devoir un jour basculer en 3.
      P.

    Répondre à ce message

  • J’adore ce genre de plugin !

    Répondre à ce message

  • 6

    Bonsoir,

    J’utilise le plugin (v 2.1.4) dans un site en SPIP 3.0.4 avec le squelette Escal 3.45.3
    Sur mon site local, le fonctionnement est impeccable, mais sur le site en ligne, lorsque je suis connecté, j’ai le message « //www.chalets-metabief.fr/spip.php?page=calendrier mini escal.json&var mode=recalcul&lang=fr&start=1343772000&end=1346450400, json] 404 » qui s’affiche.

    Le site local et le site en ligne étant strictement identique, je ne comprends pas d’où peut venir le problème.

    • Je me réponds :
      Le site en ligne est protégé par un .htaccess
      Si je le supprime, le message d’erreur disparaît.

    • J’ai le même probleme mais je ne peu pas suprimer le .htaccess car c’est un site sous free (d’ou l’impossiblité de supprimer celui ci)

      Avez vous trouvé une autre solution ?

      Cordialement

    • J’ai le même genre d’anomalie : message « //cjafa.free.fr/spip.php ?page=calendrier mini event.json&lang=fr&start=1346450400&end=1349042400, json] 404 » mais comme il n’apparaît que lorsque je me connecte en tant qu’administrateur et pas dans les autres cas (public ou connexion de rédacteur), j’ai pris l eparti de l’ignorer.

    • Les deux bugs sont corrigé par la version 2.3.2 du plugin. Il faudra aussi mettre a jour le plugin agenda pour éviter d’avoir les dans le tooltip.

    • Après mise à jour, j’ai toujours le même message d’erreur.

      (et la mise à jour ne m’a pas été proposée, j’ai dû la faire « à la main »)

    • Désolé, je me suis trompé de fil de discussion, je n’ai pas corrigé votre bug que je ne reproduis pas. Il me faudrait un accès administrateur sur votre site pour pouvoir trouver la source du problème.

    Répondre à ce message

  • 5
    ChristianD.

    J’ai installé minicalendrier, tout fonctionne mais j’ai une question qui va certainement paraitre incongrue...

    Pourquoi doit-on lier un évènement à un article dans la mesure où l’évènement s’affiche sans qu’il soit possible de cliquer vers l’article ? Et que ce lien vers l’article ne se voit que dans l’interface privée.

    Ou alors, c’est mon installation qui s’est mal passée.

    • Bonjour

      J’ai le même problème. Une syntaxe comme celle-ci fonctionne bien sur mon site mais ne correspond pas à mes besoins : #CALENDRIER_MINI#ENVdate,date,#URL_PAGEjour,#URL_PAGEcalendrier_mini_event.json

      Je souhaiterai simplement afficher l’article auquel l’événement est rattaché lorsque je clique sur une date. Quelles est la variable à transmettre pour le faire ?

      Merci

    • Je me réponds car j’ai trouvé une syntaxe qui fonctionne sur mon site. J’ai appelé le calendrier à l’intérieur d’une boucle événements et cela m’a permis de récupérer l’URL de l’article (et les infos bulles également mais cela est peut être plus lié à la mise à jour du plugin évoquée dans un autre post)

      <BOUCLE_cal(EVENEMENTS)agenda date_debut, mois, (#ENVdate|annee), (#ENVdate|mois) par date age<0>
      #CALENDRIER_MINI#ENVdate,’date’,#URL_ARTICLE,#URL_PAGEcalendrier_mini_event.json

    • Le code en entier

      <BOUCLE_cal(EVENEMENTS){agenda date_debut, mois, (#ENV{date}|annee), (#ENV{date}|mois)} {par date} {age<0}>
      #CALENDRIER_MINI{#ENV{date},'date',#URL_ARTICLE,#URL_PAGE{calendrier_mini_event.json}}
      </BOUCLE_cal>
    • ChristianD.

      Merci Anna.

      Je vais essayer cette boucle.

      As-tu essayé le cas, où il y a plusieurs évènements à la même date. Comment cela se passe ?

    • Je n’avais pas pensé à ce cas de figure : donc après test cela ne fonctionne pas dans ce cas (il m’affiche un calendrier pour chaque événement).

      Je contourne donc le problème en laissant la syntaxe proposée par défaut (#SELF) et en affichant en dessous du calendrier la liste des evenements grâce à une boucle evenements. Dans l’ideal, il faudrait que je supprime le lien qui ne me sert plus à rien mais je ne sais pas si c’est possible.

    Répondre à ce message

  • 4

    Bonjour,
    Je viens d’installer la version 2.3.0 et rencontre quelques anomalies qui semblent liées à l’affichage d’événements au survol.
    1) j’avais un événement nommé « 25e anniversaire » ; l’affichage du mois contenant cet évènement était entièrement brouillé. J’ai fini par rebaptiser l’événement « Anniversaire » et tout est rentré dans l’ordre. Apparemment un événement dont le titre commence par un chiffre pose problème, ce qui n’était pas le cas avec la version 2.1.4.
    2) pour les événements situés dans la dernière ligne (par exemple le 31 du mois), au survol le titre est répété (pavé avec 2 lignes identiques).
    Ma configuration : Spip 3.0.5, ScolaSpip 3.0.20, Agenda 3.7.1

    • Pour le 1) je soupconne que ce soit le « e » de « 25e » et que tu utilise un plugin qui le passe automatiquement en exposant. Peux tu me confirmer ?
      Pour le 2) peux tu le donner la date exacte de l’evenement (date et heure de debut et de fin) ?

    • Exact pour le point 1). J’avais suspecté ce point et avais supprimé le e sans que cela suffise à clore le problème.
      Pour le point 2), par exemple 30 avril 2012 (http://cjafa.free.fr)

    • Je viens de refaire la manip’. Contrairement à ce que j’ai écrit c’est le « e » exposant qui pose problème et pas le chiffre. J’avais dû oublier de vider le cache entre deux des essais.
      L’ajout d’un espace dans le titre « 25 e » au lieu de « 25e » évite le défaut, mais c’est moins élégant.
      Pour le point 2) le défaut n’est pas systématique : il n’apparaît qu’à partir du second appel au mini calendrier.

      Et j’allais oublier : merci pour le magnifique travail sur Spip, je suis en outre bluffé par ta réactivité.

    • Bonjour Cedric,
      et merci. Je confirme que les versions publiées ce matin corrigent ces anomalies.
      Cordialement.

    Répondre à ce message

  • 1

    Comme d’autres, je suis face à un calendrier qui ne marche plus depuis la mise à jour effectuée de SPIP 2 à 3. Comportements de navigation assez aléatoires (changer de mois, d’année, tantôt, ca marche tantôt pas) et malgré une quantité d’essais pas moyen de faire afficher les événements dans les cases ou de disposer d’une class (précédemment « occupe ») avertissant qu’il y a un événement ce jour-là.

    Le plugin est en mode « test », c’est donc compréhensible.

    • Tu es le seul à remonter des problème de navigation aléatoire. Tu as un exemple qui ne fonctionne pas ?

    Répondre à ce message

  • 3

    Bonjour Cédric,

    Bravo et merci pour ce plugin bien utile.
    J’ai cherché comment remplacer les abréviations des jours (l., m., j., etc ..) par la majuscule correspondante (L, M, etc ..) comme la version pour spip2.0, mais je n’ai pas trouvé !
    Dans quel fichier se cache la déclaration de ces abréviations ?
    Merci et à plus

    • Tropicaloo

      Bonjour,
      J’ai personnellement utilisé les css du fichier minical.css en déclarant la propriété :
      .calendriermini table th { text-transform: capitalize; }

    • Tropicaloo

      Pour une modification sans CSS (pour avoir juste la majuscule sans le point), il faut modifier les traductions de date_jour_1_initiale à date_jour_7_initiale dans le fichier de langue ecrire/lang/spip_fr.php. (faire une copie de ce fichier et la mettre dans le répertoire squelette)
      Attention cette modification impacte potentiellement tous les plugins utilisant cette traduction pas uniquement calendriermini.

    • Merci beaucoup Tropicaloo, ça marche.

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

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

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom