Simple Calendrier v2

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 (incompatible) au plugin Agenda 2.

Note à propos de la version 2.1.0
Cette version ajoute en option la gestion des horaires d’un événement.

Installation du Plugin

Le plugin s’installe comme tous les autres, en ajoutant son dossier dans le dossier plugins/ et en l’activant dans l’espace privé. En savoir plus.

Avertissement : Ce plugin n’est pas compatible avec le plugin Agenda 2.0 et ultérieur. Voir la section « compatibilité avec d’autres plugins ».

Utilité du plugin

Ce plugin fournit un nouvel "objet éditorial" : l’évènement.
Il permet donc de créer des évènements, au même titre que l’on peut créer des articles ou des brèves.

Ce plugin permet de gérer différents scénarios :

  • Un simple calendrier pour tout le site
  • Un calendrier ou les évènements sont classés par thématique grâce aux mots clés
  • De multiples calendriers, en activant l’option permettant de raccrocher l’évènement à une rubrique.

Ce plugin ne permet pas :

  • La gestion des heures/minutes (mais le descriptif peut dans certains cas suffire...)
  • La gestion des répétitions.
  • Une quelconque notion d’inscription.
  • Et surement plein d’autres choses !

Pour ces derniers points, il existe un autre plugin très complet et éprouvé, de gestion d’évènements nommé Agenda 2.

Pourquoi ce nom ?

L’objectif de ce plugin est de fournir une solution de gestion d’évènements qui soit le plus simple possible à l’utilisation. Dans beaucoup de cas, il suffira de créer quelques évènements, de renseigner quelques champs de base. Puis d’utiliser une boucle EVENEMENTS pour les afficher.

Fonctionnalités du plugin

Un évènement comporte les champs suivants :

  • titre (requis)
  • date de début (requis)
  • date de fin
  • lieu
  • descriptif
  • texte
  • lien

Une page de configuration [1] dédiée à ce plugin permet de préciser :

  • Qui a le droit de créer des évènements (administrateurs / rédacteurs).
  • Si un évènement peut être affecté à une rubrique ou non.
  • Les champs à rendre disponibles sur le formulaire de saisie.
  • Si les articles / brèves peuvent « être épinglés » dans le calendrier (ce qui peut permettre d’utiliser le texte de l’article/de la brève comme contenu textuel pour l’évènement. On parlera de texte par référence).
  • Le choix d’un thème pour le mini-calendrier de l’espace public.

Liste des évènements :
Dans l’espace privé, la liste de tous les évènements est accessible via le menu Edition. Cette page permet aussi :

  • la création de nouveaux évènements
  • de voir la répartition des évènements par année et par mois.
  • Pour les administrateurs, un lien "Démo" permet de comprendre l’utilisation de la boucle EVENEMENTS.

Par défaut, la liste affichée est filtrée pour n’afficher que les évènements à venir.

Création d’évènements :
Les évènements peuvent être créés :

  • depuis la liste des évènements (accessible via le menu Edition)
  • depuis une rubrique si l’option "affectation aux rubriques" est activée.
  • depuis un article ou une brève si l’option "texte par référence" est activée.

Note : Pour les 2 derniers points, il s’agit simplement de raccourcis permettant de pré-remplir certains champs.

Quelques captures d’écran

Configuration du plugin
Accessible depuis le menu Configuration > Fonctions avancées
Page de liste des évènements
Accessible depuis le menu Edition
Page de liste des évènements restreinte à une rubrique
Lorsque l’option d’affectation aux secteurs / rubriques est activée.
Portlet sur la page rubrique
Lorsque l’option de rattachement aux rubriques est activée.
Création d’un évènement
Lorsque les options par défaut sont utilisées.
Création d’un évènement
Lorsque les options « affectation aux secteurs » et « texte par référence » sont activées.
Portlet sur la page article/breve
Présente lorsque l’option « Texte par référence » activée.
Visualisation d’un évènement
Ici dans le cas ou il est affecté à une rubrique (Fil d’ariane + portlet gauche)
Script de démo !
...qui s’adresse aux créateurs de squelettes...

Dans les squelettes

Une boucle :

<BOUCLE_evenement(EVENEMENTS)> ... </BOUCLE_evenement)

Des critères spécifiques :

  • {en_cours} pour sélectionner les événements commencés et non encore terminés à la date courante.
  • {en_cours_et_a_venir} pour sélectionner les événements futurs ou commencés et non encore terminés à la date courante. (v 2.5.0)
  • {a_venir} pour sélectionner les événements futurs (non commencés) par rapport à la date courante.
  • {a_venir #ENV{date}} pour sélectionner les événements futurs (non commencés) par rapport à la date #ENV{date}
  • {!a_venir #ENV{date}} pour sélectionner les événements passés ou en cours à la date #ENV{date}
  • {evenement_passe} pour sélectionner les événements terminés.
  • {du_mois} : Les évènements du mois courant.
  • {simplecalperiode 20160101, 20161231} : Les évènements entre le 1er janvier et le 31 décembre 2016.

Des balises :

  • Dans le cadre d’une boucle EVENEMENTS :
    • #ID_EVENEMENT
    • #TITRE
    • #URL_EVENEMENT
    • #LIEU
    • #DATE_DEBUT
    • #DATE_FIN
    • #DATE : date de publication
    • #LOGO_EVENEMENT
    • #DESCRIPTIF
    • #TEXTE
    • #LIEN_TITRE : titre du lien (v1.2)
    • #LIEN_URL : adresse du lien (v1.2)
    • #TYPE : Type d’objet pointé quand l’option « Texte par référence » est activée.
    • #ID_OBJET : identifiant de l’objet pointé quand l’option « Texte par référence » est activée.
  • Hors contexte :
    • #SIMPLE_CALENDRIER : Affiche un mini calendrier du mois en cours. Sur ce calendrier, les dates de début d’évènement sont mises en valeur.

Des filtres :

[(#TYPE|simplecal_afftexteref{#ID_OBJET})]

|simplecal_afftexteref : Si l’option « Texte par référence » est activée : Permet de récupérer le texte de l’objet pointé.

Un nouveau squelette :

Un évènement est affiché grâce au squelette evenement.html au même titre que le squelette article.html affiche un article.

Exemple pour le squelette evenement.html :

<BOUCLE_evenement(EVENEMENTS){id_evenement}>
<h1>#TITRE</h1>

#LIEU

<!-- Affichage sympa de type 'de telle date à telle date' -->
[(#DATE_DEBUT|simplecal_affdates{#DATE_FIN})]

#LOGO_EVENEMENT

#DESCRIPTIF

<!--
Affichage par ordre de priorité : 
1 - #TEXTE : Le texte de l’événement s'il existe
2 - #TYPE/#ID_OBJET : Sinon, le texte de l'objet référencé s'il existe (option)
-->
[(#TEXTE|?{ #TEXTE,
    [(#TYPE|?{ [(#TYPE|simplecal_afftexteref{#ID_OBJET})], ''})]
})]

<!-- Lien vers un site web (v1.2) -->
[(#LIEN_URL|oui)
  <a href="#LIEN_URL">[(#LIEN_TITRE|?{#LIEN_TITRE, #LIEN_URL})]</a>
]

<!-- Les mots clés rattachés s'il y en a -->
<BOUCLE_mot(MOTS){id_evenement}>
    #TITRE
</BOUCLE_mot>

</BOUCLE_evenement>

Personnalisation du mini-calendrier

Dans l’espace privé, lorsque l’on crée un évènement, la date de début et la date de fin peuvent être saisies manuellement ou en cliquant sur la petite icône à droite du champ. Un mini calendrier s’ouvre alors permettant de choisir la date. Ce Widget « datepicker » provient de la librairie jquery.ui.

Dans la partie publique, il est possible d’afficher un mini-calendrier en utilisant la balise #SIMPLE_CALENDRIER. La structure (html) de ce mini-calendrier est la même que celle du datepicker vu précédemment.

Cela permet d’utiliser les mêmes feuilles de styles. Et c’est pourquoi dans la configuration du plugin (Configuration -> Fonctions avancées), vous pouvez choisir un thème pour la partie publique.

Où se trouvent ces thèmes ?
Chaque thème fait l’objet d’une feuille de styles dans le dossier plugins/simple-calendrier/prive/css/datepicker. Les thèmes déjà embarqués dans le plugin proviennent du site http://jqueryui.com/themeroller.

Comment créer un nouveau thème ?
Réponse : à la main, en dupliquant une feuille de styles existante et en l’adaptant.

Pour vous aider, vous pouvez utiliser le site http://jqueryui.com/themeroller. Une fois votre style défini, il ne vous reste plus qu’à reporter les valeurs des couleurs (bordure, fond, texte) dans la feuille de styles que vous aviez précédemment dupliquée.

Compatibilité avec d’autres plugins

Plugin Agenda 2
-  100% incompatible  ! Ne cherchez jamais à faire cohabiter ces 2 plugins.
-  Aucun mécanisme de migration d’Agenda2 vers simple-calendrier n’est prévu.

Plugin corbeille
Les évènements en statut « à la poubelle » peuvent être gérés par le plugin corbeille

Plugin MiniBando
Prise en compte par le plugin MiniBando.

Plugin Acces restreint (A.R)
Le plugin simple-calendrier est compatible avec le plugin A.R. moyennant les adaptations décrites dans la section suivante.

Plugin LIM
Compatibilité avec la fonction de restriction par rubrique.

Bugs connus et solutions

Accès restreint :
-  Crash possible de la boucle EVENEMENTS.
-  Crash possible avec un message d’erreur de type « fonction déjà définie ».

L’installation du plugin A.R nécessite quelques petites adaptations pour pouvoir fonctionner avec simple calendrier :

  • Éditez le fichier public/acces_restreint.php du plugin A.R. Dans le « case evenement » : Ajouter un « break ».
  • Éditez le fichier inc/acces_restreint_autoriser.php du plugin A.R. et renommer la fonction ’autoriser_evenement_voir’ (en ’autoriser_evenement_voir_inutilise’ par exemple...)
  • Il faut ensuite vider le cache SPIP

Note : ces modifications nécessaires dans le plugin A.R. n’ont pas de conséquence sur son fonctionnement. Le code initial étant prévu pour un usage du plugin Agenda2.

Ce plugin en action :

Notes

[1La page de configuration se trouve dans le menu : ConfigurationContenu du site au même titre que la configuration des articles ou des brèves.

Discussion

3 discussions

  • Bonjour,
    le plugin est en action ici : https://www.jeunes-talents.org
    Vous pouvez bien sûr l’ajouter dans les références.

    J’ai une question par rapport au calendrier : celui-ci a fréquemment un décalage de plusieurs heures. Par exemple, ce matin du 1er juillet, il affichait encore le mois de juin. Si je vide le cache via l’espace privé, ça ne change rien. Si par contre je vide le cache complètement, par ftp, là c’est bon.
    Quelle solution pour éviter d’avoir à faire ça manuellement svp ?

    Merci par avance,
    Rémy

    Répondre à ce message

  • 4

    Bonjour,
    merci pour ce plugin qui porte bien son nom. Simple et efficace.
    Sans doute quelque chose m’a-t-il échappé, mais comment faire un lien depuis #CALENDRIER_MINI vers l’évènement ? Le calendrier affiche bien les dates où un évènement est programmé. Mais il n’y a aucun lien depuis le calendrier vers l’évènement ?..
    Vu que c’est également le cas dans la page de démo, est-ce une limitation du calendrier ?
    D’avance merci pour votre aide.
    Rémy

    • Bonjour Remy,
      Merci pour ton retour !

      Le #SIMPLE_CALENDRIER colore le jour différemment s’il existe un évènement avec une date de début qui correspond. C’est tout.

      C’est un sujet un peu compliqué car dans l’absolue, on pourrait avoir plusieurs évènements qui démarrent le même jour. Dans ce cas, s’il existait un lien, il faudrait qu’il ouvre une boite de dialogue pour pouvoir choisir l’évènement désiré. Par ailleurs, ce widget ne se préoccupe pas non plus d’évènement qui ont démarré un mois précédent et qui se terminent sur le mois courant (quid si ça tombe sur une date de début d’un autre évènement !), ni des évènements commencés avant et qui se terminent après.

      A l’inverse, il est simple d’ajouter manuellement un lien de type « Voir le calendrier » au bas du widget, qui pointe une page listant les évènements en cours et/ou à venir.

      Julien

    • Merci Julien.
      Je comprends la difficulté que ça représente. Dans mon usage, un événement = une date unique, d’où ma question.
      Effectivement, par ailleurs j’ai une liste des événements avec des liens.

      Quel(s) fichier(s) faut-il éditer pour ajouter un lien, si ce n’est pas trop compliqué dans ce contexte ?

      Rémy

    • Le fichier qui génère le petit calendrier est dans /balise/simple_calendrier.php. Détection de la case active ou non Ligne 171.

      Génération du code de la case les lignes suivantes.

      La fonction ne reçoit qu’un simple tableau de dates. Il faudra sans doute remplacer ça par un tableau indexé id_evenement => date.

    • Merci Julien,
      j’avais identifié le fichier, mais comme je n’ai aucune compétence en php, j’ai fait appel à mon ami Ludo qui a modifié le fichier comme ceci (à partir de la ligne 171 jusqu’à 200) :

      if (in_array($curdate, $tab_dates)){
      			$active = true;
      			$idEvenement = array_search($curdate, $tab_dates);
      		} else {
      			$active = false;
      			$idEvenement = null;
      		}
      		
      		
      		
      		if ($jour_now==$i && $mois_now==$mois && $annee_now==$annee) {
      			$s .= $rc.'<td class="ui-datepicker-today">';
      			$s .= $rc.($idEvenement ? '<a href="/spip.php?evenement'.$idEvenement.'">' : '').'<span class="ui-state-default ui-state-highlight">'.$i.'</span>'.($idEvenement ? '</a>' : '');
      			$s .= $rc.'</td>';
      		}
      		else {
      			$s .= $rc.'<td>';
      			if ($active){
      				$s .= $rc.($idEvenement ? '<a href="/spip.php?evenement'.$idEvenement.'">' : '').'<span class="ui-state-default ui-state-active">'.$i.'</span>'.($idEvenement ? '</a>' : '');
      			} else {
      				$s .= $rc.'    <span class="ui-state-default">'.$i.'</span>';
      			}
      			$s .= $rc.'</td>';
      		}
      		$isem++;
      		if ($isem == 7){
      			$s .= $rc.'</tr>';
      			$isem = 0;
      		}
      	}

      Ça fonctionne parfaitement dans mon cas (une date = un événement). Il m’a donné l’autorisation de partager ses modifs pour en faire profiter la communauté.
      Encore merci pour ton aide,
      Rémy

    Répondre à ce message

  • 1
    Philippe Robin

    Bonjour
    merci pour ce plugin qui facilite bcp.
    néanmoins :
    comment faire pointer le #TITRE de l’évènement vers le lien de l’article lié (par texte de référence) ?
    cela ne fonctionne pas :

    <BOUCLE_evenement(EVENEMENTS)>
    <a href="[(#TYPE|simplecal_afftexteref{#ID_OBJET})]">#TITRE</a>
    </BOUCLE_evenement>

    merci bcp.

    • Bonjour Philippe !
      (Une petite réponse 4 ans après...)

      Quelque chose comme ça devrait fonctionner :

      <BOUCLE_art(ARTICLES){id_article=#ID_OBJET}>
          <a href="#URL_ARTICLE">#TITRE</a>
      </BOUCLE_art>

    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