Agenda 2.0 et ultérieur

Voici la version pour SPIP 2.0 du Plugin Agenda pour SPIP 1.9.2, avec une interface remaniée pour encore plus de plaisir.
La lecture de Calendrier Mini 2.0 est également chaudement recommandée, étant donné que Agenda 3 est dépendant de ce plugin.

Le portage du plugin Agenda pour SPIP 2.0 a été l’occasion de repenser et améliorer l’ergonomie de son interface. La version 2.0 du plugin agenda ne nécessite plus le plugin Widget Calendar, mais nécessite le plugin SPIP Bonux

La navigation dans les événements est directement accessible par un sous-menu du menu edition :

La présentation de ces événements délaisse le mode calendrier pour un affichage en liste plus pratique à l’usage.
Par défaut seuls les événements à venir sont affichés :

Ce fonctionnement évite d’encombrer l’affichage avec les événements passés toujours plus nombreux.

Un menu de navigation latéral permet d’afficher tous les événements, paginés, triés par date :

Le menu latéral inclut également une navigation antéchronologique par mois calendaire permettant l’affichage de tous les événements d’un mois

La liste centrale présente une vue résumée de chaque événement. Il est possible de voir plus de détails en cliquant sur le titre de l’événement :

Un lien [article] permet d’accéder à l’article qui contient cet événement :

On y retrouve exactement le même type de navigation, mais limitée aux événements de l’article.

Créer un nouvel événement

Le lien situé dans le bandeau titre de la boîte agenda permet de créer un nouvel événement

Modifier un événement

Lorsque vous dépliez un événement, un bouton [modifier] permet d’accéder à l’édition de l’événement.

Si l’événement est une répétition, il n’est pas possible de l’éditer directement. Dans ce cas le lien modifier est remplacé par un lien [source] qui permet d’accéder à l’événement source pour le modifier.

Edition d’un événement

Que ce soit lors de la création ou l’édition d’un événement, la saisie se déroule désormais sur une page indépendante dédiée :

Outre les champs habituels de titre et descriptif, vous y retrouverez la zone d’édition des dates de début et de fin. Une case à cocher toute la journée permet de ne pas sélectionner d’horaire.

Sur chaque champ de saisie de la date, une icone calendrier permet d’accéder à un mini calendrier de saisie.

Les répétitions sont saisies après la date de début et de fin, sur un calendrier de saisie dédié. Le principe des événements répétés et que l’heure de début et la durée sont toujours conservées de l’événement d’origine, mais seul les jours de début changent en prenant les valeurs cochées dans le calendrier des répétitions.

Après saisie, lorsque vous enregistrez votre événement, vous revenez sur la page d’origine avec ce seul événement affiché en détail :

Vous pouvez ainsi vérifier votre saisie.

Vous pouvez retrouver tous les événements, ou les événements à venir seulement, en cliquant sur les liens correspondants.

Squelettes et boucle EVENEMENTS

En ce qui concerne l’utilisation du plugin agenda dans les squelettes, vous pouvez vous référer à la documentation du Plugin Agenda pour SPIP 1.9.2.

Nouveaux critères

{evenement_a_venir} pour sélectionner les événements pas encore commencés à la date courante
{evenement_a_venir #ENV{date}} pour sélectionner les événements pas encore commencés à la date #ENV{date}
{!evenement_a_venir #ENV{date}} pour sélectionner les événements finis ou en cours à la date #ENV{date}

{evenement_en_cours} pour sélectionner les événements en cours à la date courante
{evenement_en_cours #ENV{date}} pour sélectionner les événements en cours à la date #ENV{date}
{!evenement_en_cours #ENV{date}} pour sélectionner les événements *pas* en cours à la date #ENV{date}

{evenement_passe} pour sélectionner les événements passés/finis à la date courante
{evenement_passe #ENV{date}} pour sélectionner les événements passés/finis à la date #ENV{date}
{!evenement_passe #ENV{date}} pour sélectionner les événements en cours ou pas encore commencés à la date #ENV{date}

Il est possible combiner ces 3 critères pour effectuer une sélection fine.

Pour un affichage sous forme d’agenda en case, voir SPIP 3, Agenda et FullCalendar ou encore Agenda Fullcalendar facile.

Discussion

616 discussions

  • 1

    Bonjour,

    Je souhaite afficher le calendrier des événements mais seulement à partir du mois où il commence.

    En clair, sur la page https://www.kandidator.fr/festival-des-nouvelles-tetes.html par exemple, commencer le calendrier à juillet car les 1res dates sont en juillet et pas en juin.

    Les dates sont liées aux articles correspondant. Dans ce cas, à l’article « Festival... »

    Code actuel :

    [(#CALENDRIER_MINI{#DATE_DEBUT,date, #URL_PAGE{jour,id_article=#ID_ARTICLE}, #URL_PAGE{calendrier_mini_event.json,id_article=#ID_ARTICLE}})]

    Merci de vos lumières.

    • Trouvé : Ajouter juste « date_debut »

      <INCLURE{fond=agenda_mini_article,date_debut,self=#SELF} />

    Répondre à ce message

  • Bonjour,

    Je voudrais afficher le calendrier, mais seulement à partir du mois où commence le prochain événement.
    Exemple page https://www.kandidator.fr/festival-des-nouvelles-tetes.html
    -  > Afficher juillet même si je suis actuellement en juin car la 1re prochaine date est le 2 juillet

    Code actuel :

    [<div class='ajax'>
    (#CALENDRIER_MINI{#DATE_DEBUT,date, #URL_PAGE{jour,id_article=#ID_ARTICLE}, #URL_PAGE{calendrier_mini_event.json,id_article=#ID_ARTICLE}} )
    </div>]

    Merci de votre aide.

    Gil

    Répondre à ce message

  • Je voudrais pouvoir cacher sur la page d’édition d’un évènement les champs

    "Inscription en ligne et
    Limiter le nombre de places"

    dans l’espace privé.

    Est-ce que je dois ajouter quelque chose dans mes_fonctions.php ? ou autre ?

    Merci

    Répondre à ce message

  • 4

    Salut,
    Comme Crazyspip, j’aimerais pouvoir créer un événement sans lien vers un article.
    J’ai intégré la constante « define(’_AGENDA_AUTORISER_ORPHELINS’, TRUE) ; » dans le fichier « mes_options.php », mais aucun résultat !
    Le plugin m’affiche un message d’erreur « Vous devez indiquer un article » dans le champ « Associé à l’article » de la création d’événement.

    Merci
    Pour info j’utilise Spip 3.1.1 + Z-core + Agenda 3.18.4

    Répondre à ce message

  • 17

    Bonjour Maïeul,

    Quand on met un événement en ligne par cet outil, on rempli tous les champs et au bout d’un certain temps, Google Search Console te mets que tu as des erreurs sur ton site dans son menu Améliorations>Spectacles et Billets , et t’« explique » les erreurs sur ces pages qui contiennent des événements :

    location.address" manquant
    Type d’objet non valide pour le champ « location »
    Champ « location » manquant

    d’où cela peut-il venir ? Du plugin ou de la mise en forme ?
    merci d’avance.

    • pourquoi s’adresser à moi en particulier ?

      le souci vient de la mise en forme. Il s’agit de microformat. cf https://www.contentking.fr/academie/schema/

    • Merci ,
      Pourquoi toi ? mais parce que tu réponds rapidement et à propos.

      Ta réponse à la question est instructive et en fait, en cherchant (je teste l’effet sous 1 semaine), il n’y pas besoin de faire des trucs complexes : les champs des événements mis en ligne sont simplement mal (ou pas) remplis à priori .
      Il faut bien remplir une belle adresse dans le champs « adresse » et « location » demande je ne sais quoi , un nom d’endroit sans doute ou de société.

      Alors, en plus, je suggère que tu / la communauté, ajoutes dans ce plugin les champs suivants (qui ne donne que des « avertissements ») :

      Champ « offers » manquant
      Champ « image » manquant
      Champ « description » manquant
      Champ « performer » manquant
      Champ « dtend » manquant

    • bon , j’ai fait des modifs en ligne et on peut tester immédiatement par Google : https://search.google.com/structured-data/testing-tool/u/0/?hl=fr

      Les pages qui se terminent par ?id_evenement= viennent bien du plugin Agenda ?
      si oui,
      Il me reste 2 erreurs non résolues des champs « lieu » et « adresse » du plugin, alors que sont saisis des valeurs « normales » :

      1 : location : Thing n’est pas un type de cible valide connu pour la propriété location.
      @type Thing
      name Siège nom société - 13, rue toto- 99999 Ville
      2 : adress : Veuillez saisir une valeur pour le champ address. (alors que c’est saisi)

      merci bien !

    • Pour les 2 problèmes de mise en forme de l’adresse , j’ai dans mon squelette les lignes (incorrectes) suivantes :

      <div class="entry-content">
      		#GET{intro}
      		[<p class="location" itemprop="location"><span class="lieu #EDIT{lieu}">(#LIEU)</span>[<br /><span class="adresse #EDIT{adresse}">(#ADRESSE|PtoBR)</span>]</p>]
      	</div>]

      je ne sais ce qu’il faut y modifier pour que cela soit correct. Merci d’avance

    • les classes dovient porter les noms correspondant aux champs. Donc ici tu doit avoir une class « adress » (en anglais).

      Cela étant ce n’est pas parce que je répond rapidement qu’il faut m’interpeller personnellement.

      Le champ description existe (Descriptif, plus précisement, mais il faut adapter les classes dans le squelette). Image correspondrait au logo. Dtend existe : c’est la date de fin. Reste performer et offers, mais ceux qui ne sont pas assez généraliste pour les intégrer dans le plugin. Et dans tous les cas la prise en compte par google dépend des squelettes. Si tu passe sur IRC je peux t’expliquer un peu plus en détail.

    • agenda fournit des pages par défaut, mais en général c’est le squelette qui gère.

    • Merci , je t’appelle ou ce soir, demain ou Jeudi sur irc : mon pseudo est Prx38 - et le tien ?
      Si on regarde la norme des « events » https://schema.org/BusinessEvent
      et des adresses https://schema.org/PostalAddress
      On voit (à priori) qu’il faudrait des autres champs dans le plugin sans doute .
      Désolé de t’avoir adressé nominativement . merci d’avance.

    • oui, mais en fait même sur postal adress ca va pas (d’experience). Il veulent quand même un champ adresse unitaire, et pas une séparation entre adress.

      Je suis pas dispo les soirs.

    • bonjour,
      en CR de nos échanges off :

      il est impossible en l’état de ce plugin d’améliorer les squelettes afin d’être compatible avec la norme des « events » https://schema.org/BusinessEvent, le problème vient seulement au niveau de l’adresse.

      La conséquence pour le webmestre, de l’emploi d’une page d’événement utilisée tel que avec ce plugin, sur une page article est le non-référencement par Google de cette page article ou événement à cause de l’erreur de sa non conformité.

      Il y aurait une solution (à tester) palliative en attendant : l’emploi du plugin « champs extra 3 » afin de rajouter les champs nécessaires à ceux du plugin Agenda afin de les employer dans son squelette.

    • Tes propos sont un peu décalé. Ce n’est pas un empechement de référencement par google, mais le fait que google ne considère pas cela comme la présentation d’un évènement. En outre, le problème ne vient pas de l’adresse, puisque précismeent ce champ est défini. Il faut simplement modifier les class css. dans ton squelette.

    • bonjour,
      « décalés » je ne sais pas mais ce qui en est avec Google, en résultat : tu n’as personne à ton événement !

      Si on regarde le champ adresse du plugin, si je ne me trompe , il est unique,
      Or, si tu suis le lien donné, puis sur « Location » = lieu en anglais (https://schema.org/PostalAddress)

      Il est demandé tous ces 6 champs pour l’adresse :

      • addressCountry Country or
        Text The country. For example, USA. You can also provide the two-letter ISO 3166-1 alpha-2 country code.
      • addressLocality Text The locality. For example, Mountain View.
      • addressRegion Text The region. For example, CA.
      • postOfficeBoxNumber Text The post office box number for PO box addresses.
      • postalCode Text The postal code. For example, 94043.
      • streetAddress Text The street address. For example, 1600 Amphitheatre Pkwy.

      Il y a sans doute un problème de compréhension de 1 à 6 ...un décalage effectivement ;-)

    • Non mais il faut distinguer le référencement d’une page et le fait que google considère cette page comme un evenement. Ce sont deux choses différentes. Avoir une page considéré comme un evenement est un plus, mais le contraire n’empeche pas l’indexation google, contrairement à ce que tu écrits dans ton message ! Surtout que tu m’attribue cela en disant que c’est un CR de nos échanges, ce qui n’est pas le cas.

      Quand au fait schema.org réclament postal adress : oui et non. Tu peux très utiliser une location qui ne soit pas de type postaladresse, mais de type text.
      De toute facon google est incohérent.
      Sur https://search.google.com/structured-data/testing-tool pour la page https://www.planete-sciences.org/astro/campagne-astronomie/, pour laquelle j’ai une adresse structurée, il me dit qu’il faut pas le champ adresse, mais si je l’enlève il me dit qu’il le faut :)

    • arf, j’ai compris ce qui allait pas. En fait « location » doit avoir lui même un champ « adress » de type postaladress ou text. Donc tu pourrais très bien te débrouiller avec une adress de type text. Bon, sur le site d’astro j’ai plus détaillé en utilisant des champs extras.

    • merci, tu vois ... moi aussi il me disait GG que cela n’allait pas (voir 1er message de cet histo) et ce que tu dis là . Maintenant la norme en a un peu rajouté.

      Donc ce qui veut dire qu’il faut ajouter dans tous les squelettes (Events) une class de class en qq sorte en utilisant le champ texte de l’adresse de Agenda ? merci

    • une classe location.adress je pense. Ou bien adress dans location, en plus de name dans location. En fait je sais pas exactement comment cela fonctionne pour les classes. Perso j’utilise ld+json, je trouve ca plus simple à produire.

      Voici à titre d’exemple le code que j’utilise pour ce site

      #SET{ld,#ARRAY}
      <B_evenements>
      <BOUCLE_evenements(EVENEMENTS){id_evenement IN #ENV{evenements}} {par date_debut, num titre}>
      [(#HORAIRE|oui)
      	#SET{debut,#DATE_DEBUT|date_iso}
      	#SET{fin,#DATE_FIN|date_iso}
      ]
      [(#HORAIRE|oui)
      	#SET{debut,#DATE_DEBUT|affdate{Y-m-d}}
      	#SET{fin,#DATE_FIN|affdate{Y-m-d}}
      ]
      <BOUCLE_articles(ARTICLES){id_evenement}{si #DESCRIPTIF|=={''}}>
      #SET{description,#TEXTE}
      </BOUCLE_articles>
      #SET{description,#DESCRIPTIF}
      <//B_articles>
      
      
      #SET{this,
      	#ARRAY{@context,http://schema.org,
      	@type,Event,
      	@id,(#URL_RUBRIQUE|url_absolue|ancre_url{evenement-#ID_EVENEMENT}),
      	url,(#URL_RUBRIQUE|url_absolue|ancre_url{evenement-#ID_EVENEMENT}),
      	name,#TITRE,
      	startDate,#GET{debut},
      	endDate,#GET{fin},
      	organizer,(#VAL{astro:plasci}|_T),
      	image,(#LOGO_EVENEMENT|sinon{#LOGO_ARTICLE_RUBRIQUE}|extraire_attribut{src}|supprimer_timestamp|sinon{#CHEMIN{images/#TYPE_LIEU.svg}}|url_absolue),
      	performer,#ARRAY{@type,organization,name,(#VAL{astro:plasci}|_T)},
      	description,#GET{description}|textebrut}}
      
      <BOUCLE_commune(GEO_COMMUNES){id_commune}>
      #SET{a,#ADRESSE|PtoBr}
      	#SET{location,
      	#ARRAY{
      		@type,place,
      		name,#LIEU,
      		address,#ARRAY{
      		streetAddress,#GET{a},
      		addressLocality,#NOM,
      		postalCode,#CODE_POSTAL
      			}
      		}
      	}
      </BOUCLE_commune>
      #SET{this,#GET{this}|array_merge{#ARRAY{location,#GET{location}}}}
      #SET{ld, #GET{ld}|push{#GET{this}}}
      </BOUCLE_evenements>
      <script type="application/ld+json">
      [(#GET{ld}|json_encode)]
      </script>
      </B_evenements>

      avec

      #ENV{evenements}

      la liste des évènements d’une page. Moi j’ai précisé le détail des adresse (parce que j’en ai besoin ailleurs sur le site), mais tu pourrais je pense t’en sorti avec address en simple text, et pas en adress détaillée comme ici. Et tu pourrais je pense le faire par un emboitement de class, et pas, comme ici, sous forme js.

    • bigre !
      mon code est au dessus, au dessus de ta 2e réponse. plus simple. je vais y regarder vers lundi .merci encore.

    • ta classe est adresse alors que pour google ca devrait être address. En tout cas e mieux c’est de tester avec cet outil https://search.google.com/structured-data/testing-tool

      (soit dit en passant : mon code parait plus complexe au premier abord, mais l’es pas tant que ca. En fait je trouve même plus simple dans la mesure où je sépare bien l’affichage html des données structurés.

    Répondre à ce message

  • 1

    J’essaye de créer un nouvel événement est j’obtiens un laconique « Vous n’avez pas le droit d’associer cet événement à cet article »
    Et pourquoi donc ?

    • est-ce que tu aurais pas activé l’option qui limite a un rubrique les evenements ?

    Répondre à ce message

  • Le fichier inclure/agenda-liste.html du plugin affiche une liste des évènements par mois avec le nom du mois en titre mais c’est un mois glissant : si on est le 7 mai il affiche les éléments jusqu’au 7 juin (et donc le mois en titre n’est pas tout à fait exact).
    J’ai essayé de modifier le code avec {mois_relatif} dans la boucle mais cela me donne des résultats aléatoires selon les mois et ça bug la pagination.

    Répondre à ce message

  • Bonjour,

    J’ai un bug avec le module d’Agenda
    Depuis un petit moment les évènements qui n’ont pas de mot-clé associés ne sont plus affichés.
    (pour être exact pas d’entrée associée dans la table spip_mots_liens)
    Vous avez une idée d’où ça peut venir ?

    Merci

    Répondre à ce message

  • Pour la pagination des évènements par mois par défaut dans le fichier agenda/v3.29.0/squelettes/inclure/agenda-liste.html la pagination mois suivant / mois précédent ne me convient pas car j’ai trop d’évènements et je voudrais donc limiter la liste avec un pas de pagination à 5. Mais alors je n’arrive pas à régler les liens de pagination suivant / précédent vers les évènements suivants et pas le mois suivant.
    Quelqu’un ici saurait comment faire ?
    Merci

    La pagination par défaut :

    <div class="pagination">
    	#SET{hasprev,''}
    	<BOUCLE_prev(EVENEMENTS){id_article?}{id_rubrique?}{id_mot?}{id_evenement_source?}{!evenement_a_venir #GET{date_prev}}{0,1}>#SET{hasprev,1}</BOUCLE_prev>
    	#SET{hasnext,''}
    	<BOUCLE_next(EVENEMENTS){id_article?}{id_rubrique?}{id_mot?}{id_evenement_source?}{!evenement_passe #GET{date_fin}}{0,1}>#SET{hasnext,1}</BOUCLE_next>
    	[(#GET{hasprev}|=={1}|ou{#GET{hasnext}|=={1}}|oui)
    	[(#INCLURE{fond=modeles/pagination_precedent_suivant,
    	label_precedent=#GET{date_prev}|affdate_periode{#GET{affichage_duree}},
    	label_suivant=#GET{date_fin}|affdate_periode{#GET{affichage_duree}},
    	nombre_pages=#VAL{1}|plus{#GET{hasprev}|?{1,0}}|plus{#GET{hasnext}|?{1,0}},
    	page_courante=#GET{hasprev}|?{2,1},
    	url_precedent=#SELF|parametre_url{date_debut,#GET{date_prev}|affdate{Y-m-d}},
    	url_suivant=#SELF|parametre_url{date_debut,#GET{date_fin}|affdate{Y-m-d}},
    	ancre=agenda-liste,
    	separateur=' | '})]]
    </div>

    Répondre à ce message

  • Bonjour,
    Lorsque j’utilise la balise
    [(#CALENDRIER_MINI#ENVdate,
    date,
    #URL_PAGEjour,
    #URL_PAGEcalendrier_mini_event.json
    )]
    J’obtiens une erreur sql : ’champ horaire ambigue’
    Il semble que cela soit corrigeable en remplaçant dans les différentes clauses ’where’ des criteres (agenda.php) horaire par evenements.horaire
    Je ne suis pas sur que ce soit la bonne méthode ?
    J’ai vu plusieurs messages dans les forums faisant part de ce problème.
    Amicalement
    Triton
    agenda 3.28.0

    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