REMARQUE : Cet article présente une très ancienne manière de faire un agenda, pour SPIP 1.4.2. Il y a désormais un plugin Agenda qui permet de faire un agenda de manière plus propre et plus efficace.
ATTENTION : Cet article présente une ancienne version du mécanisme utilisé sur le site Gastero Prod, sur lequel est disponible un article de présentation du nouveau système plus performant.
[SPIP 1.4.2] Il peut être tentant d’utiliser SPIP pour présenter un agenda d’événements sous forme de calendrier. Plutôt que devoir intégrer un logiciel externe spécialisé, et en attendant que SPIP intègre un nouveau type de données, voici un squelette mêlant boucles SPIP et code PHP.
De quelles informations avons-nous besoin ?
La première étape consiste à déterminer comment les informations seront stockées dans SPIP, et donc saisies par les rédacteurs.
L’objectif principal étant qu’un rédacteur puisse définir une date à laquelle un événement donné doit avoir lieu, nous avons besoin des éléments suivants :
- Au moins un champ de type texte ;
- Un champ de type date.
Pour le champ texte, c’est simple, et nous allons même pouvoir nous régaler. SPIP nous en propose au moins 3 très utiles et systématiquement présents quel que soit le paramétrage du site : le titre, le descriptif et le texte.
La date de publication antérieure ou la vraie date de publication ?
La date de publication d’un article est déterminée automatiquement lors de sa validation, ce qui signifie que l’auteur ne peut pas la préciser à l’avance. Elle peut en revanche être modifiée par le valideur, mais elle n’est donc pas vraiment utile pour indiquer une date d’événement - surtout si on a configuré son site pour que SPIP ne publie pas les articles post-datés.
Heureusement, SPIP propose aussi une date de publication antérieure, normalement utilisée pour indiquer à quelle date a été publié un article repris ultérieurement dans SPIP, et qui peut être définie librement par le rédacteur [1].
C’est cette date que nous allons utiliser pour définir les événements de l’agenda.
Organiser les événements
Si l’agenda doit contenir beaucoup d’informations de nature diverse, il peut s’avérer utile de les qualifier (concert, film, réunion ?) pour les mettre en évidence et éventuellement ensuite les afficher de manière sélective.
Dans SPIP deux méthodes de classement viennent immédiatement à l’esprit :
- Classement par rubrique (et éventuellement sous-rubriques) ;
- Classement par mot-clé.
Dans cet exemple, nous allons utiliser les rubriques, ce qui nous permettra de constituer toute une arborescence pour stocker les articles événements ; cela va nous permettre de filtrer les types d’événements avec une notion de granularité progressive (c’est pas chic ça ?).
Dans l’agenda de Gastero Prod, le rubriquage n’est pas très développé, mais il est déjà possible de sélectionner uniquement les événements musicaux, et éventuellement de filtrer encore plus en ne considérant que les concerts.
Notez au passage que les logos des rubriques sont utilisés pour illustrer les événements.
Intégrer l’agenda dans la partie publique
Voilà, les événements sont créés dans une arborescence de rubriques thématiques et sont positionnés à une date, passons aux choses sérieuses, l’intégration de l’agenda résultant dans les pages du site.
Première chose à faire, télécharger le package qui va grandement vous simplifier la tâche :
Ce package contient les fichiers suivants :
agenda.css |
La feuille de style permettant de personnaliser l’affichage de l’agenda |
agenda.html/php3 |
Le squelette de l’agenda, à inclure dans vos propres squelettes, et son .php3 associé |
agenda_themes.html/php3 |
Le squelette des thèmes de l’agenda, à inclure dans vos propres squelettes, et son .php3 associé |
Pour insérer l’agenda dans votre site, le plus simple est de créer un squelette particulier pour la rubrique de votre agenda. J’ai par exemple créé le squelette rubrique-43.html
sur Gastero Prod puisque la rubrique d’agenda porte l’identifiant 43.
Dans ce squelette, les éléments suivant sont à ajouter. Tout d’abord, dans l’entête, il faut ajouter la référence de la feuille de style supplémentaire à utiliser :
<link rel="stylesheet" href="agenda.css" type="text/css" />
Ensuite, il faut ajouter l’agenda lui-même, grâce à un simple INCLURE
[2] placé à l’intérieur de la boucle principale RUBRIQUE
:
<INCLURE(agenda.php3){id_rubrique}>
Enfin, il faut ajouter la sélection de l’arborescence thématique :
<INCLURE(agenda_themes.php3){id_rubrique=43}>
Notez que pour cette fois-ci, il faut préciser l’identifiant de la rubrique de l’agenda. C’est pour que l’arborescence thématique soit toujours complète, même si l’on n’affiche qu’une thématique particulière.
Quelques remarques techniques
Les paramètres de navigation d’un mois à l’autre sont passés dans l’URL au travers des variables var_nav_month
et var_nav_year
. On utilise la notation var_xxx
pour indiquer à SPIP de ne pas prendre en compte ces variables pour le calcul du cache de la page, ce qui permet à la fois de limiter l’impact sur le cache (un seul fichier cache traitera toutes les pages de l’agenda) et d’accélérer l’affichage (puisque SPIP n’aura besoin d’aller chercher les données dans la base qu’une seule fois pour toutes ces pages).
La sélection des événements à afficher se fait en PHP car il n’est pas possible de sélectionner une plage de dates dans une boucle SPIP. Une boucle avec pour seul critère la restriction thématique éventuelle est donc utilisée, et une variable PHP de type tableau nommée $events
est remplie avec la liste des événements susceptibles d’être affichés dans le calendrier du mois demandé.
Discussions par date d’activité
64 discussions
Merci beaucoup, ca marche HYPER bien, sauf que les contribs de tout le monde sur l’installation ne sont pas inutiles. (Mai je maitrise le PHP et le Mysql, ca aide bien...)
A part ca, j’ai deux problèmes
- peut-on, pourrait-on, quelq’un a-t’il essayé de gérer les heures ? :-(
pour mes applications c’est tout de même un must…
- peut-être plus général :
j’aimerais que les utilisateurs puissent rentrer facilement des évènements, je souhaite donc faire un formulaire particulier pour ca (sans etre obligé de passer par l’interace « écrire » de SPIP, que l’on ne peut pas personnaliser)
Quelqu’un sait il ou trouver la doc nécessaire (quels champs modifier dans la base, ou bien quelles parties de SPIP appeler, ou bien....)
- enfin, je pense que cet agenda n’est absolument pas compatible avec l’agenda « privé » de spip ?
Merci pour tout ce boulot absolument précieux.
Michel
Répondre à ce message
hello,
j’ai récupéré l’agenda, mais j’ai qq soucis...
l’agenda s’affiche bien dans ma page, mais je ne vois aucun evenement dedans...
de plus, quand j’appelle un mois different du mois en cours, la présentation est completement explosée, comme si aucune feuille de style n’etait appliquée, je n’ai plus mes menus, bref la cata...
help ;o)
Idem que jp : l’agenda s’affiche « correctement » en ce qui concerne les styles de ma css habituelle lorsqu’on y accède la 1re fois (lorsque l’URL est simplement www.monsite.com/rubrique.php3?id_rubrique=11) mais n’affiche pas d’évènement (pourquoi ??!!).
D’autre part, lorsqu’on se déplace dans le calendrier (mois/jour suivant ou précédent), les styles de ma css ne sont plus appliqués (l’URL est alors du type www.monsite.com/agenda.php3?id_rubrique=11&date=2004-07-01 par exemple). Si je modifie les liens pour que l’URL vers laquelle ils pointent soit du type www.monsite.com/{{rubrique.php3 ?id_rubrique=11&date=2004-07-01 et non www.monsite.com/{{agenda.php3.... la css est à nouveau appliquée correctement. Mais toujours pas d’évènements... Please help !!!!
Il faut juste être très très attentif et bien remplacer TOUTES les occurences de l’id_secteur correspondant à l’agenda de gasteroprod par l’id_secteur de votre propre agenda...
Répondre à ce message
Merci à Nicolas pour cette contrib (et le reste) ;-)
G inserré 1 ptit agenda sur ma page d’accueil et termine actuelement la mise en forme d’une page agenda sans problèmes majeurs. Sont également annoncés les événements futurs extérieurs à la rubrique agenda. (cad inclus dans les autres rubriques).
Trés pratique vu le cahier des charges du site.
Pour la page d’accueil, utilisation des infobulles
A voir prochainement sur le site encore en travaux Portail Génie Mécanique
Merci encore pour cet excellent travail.
Répondre à ce message
Bonjour
Pour eliminer cette erreur
« Parse error : parse error, expecting `’)’’ in /var/www/www.az-moto.com/html/CACHE/f/agenda-8.53f03f.NEW on line 28 »
il faut enlever les logos, hors mon fonctionnement de site se base sur les logos de rubrique et les survols.
Comment faire ?
Pierre
Répondre à ce message
Je viens de installer le agenda comme proposer sur contrib.
Je tombe sur une erreur de code que je n’arrive pas a resoudre
http://www.az-moto.com/agenda.php3?id_rubrique=8
Parse error : parse error, expecting
')'' in /var/www/www.az-moto.com/html/CACHE/f/agenda-8.53f03f.NEW on line 28 Merci pour un coup de pouce de kelkun!!! Hugo Parse error: parse error, expecting
’)’’ in /var/www/www.az-moto.com/html/CACHE/f/agenda-8.53f03f.NEW on line 28Merci pour un coup de pouce de kelkun !!!
Hugo
Même erreur sur Vivre à Mons ?
Qui possède la réponse Merci
C’est le logo de la rubrique qui pertube le fonctionnement de l’agenda.
Enlevez le logo de la rubrique, l’agenda retrouve toutes ces couleurs.
Répondre à ce message
merci pour l’agenda qui fonctionne bien. une petite proposition pour l’ameliorer simplement et permettre d’afficher plus d’informations sans casser la mise en page : utiliser l’attribut title de a href=« » pour avoir le descriptif en infobulle.
voici les modifications a faire :
ligne 29 :
et ensuite à l’affichage
voici la capture d’écran du resultat
Répondre à ce message
Proposition pour etre compatible avec le multi-langue de la version 1.7.2 et +.
Remplacer les lignes :
$months = array(’’, ’Janvier’, ’Février’, ’Mars’, ’Avril’, ’Mai’, ’Juin’, ’Juillet’, ’Août’, ’Septembre’, ’Octobre’, ’Novembre’, ’Décembre’) ;
$days = array(’Dimanche’, ’Lundi’, ’Mardi’, ’Mercredi’, ’Jeudi’, ’Vendredi’, ’Samedi’) ;
Par les lignes :
$months = array(’’, ’janvier’ , ’février’, ’mars’, ’avril’, ’mai’, ’juin’, ’juillet’, ’août’, ’septembre’, ’octobre’, ’novembre’, ’décembre’) ;
$days = array(’dimanche’ , ’lundi’ , ’mardi’ , ’mercredi’ , ’jeudi’ , ’vendredi’ , ’samedi’ ) ;
Idem pour Gastero Prod.
Bien a toi.
Répondre à ce message
J’ai bien suivi les consignes.
mais j’ai un mechant Parse error : parse error, unexpected T_STRING, expecting ’)’ in c :\program files\easyphp\www\spip2\CACHE\f\agenda-4.9b7eb2 on line 26
Tu pourrais dire ce qu’il y a ligne 26 de ton fichier de cache, justement ???
OK, ce doit être parce que tu as un logo de survol.
Est-ce que tu peux tester en utilisant un logo simple, pour valider ?
Si c’est bien ça, je ferais le correctif nécessaire.
J’avais agenda dans le squelette secteur 4 et je demandais les articles de la rubrique 4.
J’ai changé de rubrique.
J’ai viré le logo de survol du secteur 4 puis le logo
J’ai un nouveau message en ligne 26 T_STRING, expecting ’)’ in ....
$events[$date][] = array('link' => 'article.php3?id_article=10', 'title' => 'Le site Etudes.com est ouvert', 'logo' => '<img src='IMG/rubon0.jpg' name='image2' border='0' ALT='' hspace='3' vspace='3' class='spip_logos'>');
Dans mon code, la valeur de la clef ’logo’ est entourée de doubles quotes, donc je ne comprends pas que tu ne les ais pas :
’logo’ => « #LOGO_ARTICLE_RUBRIQUE »
J’ai aussi un message d’erreur du même type : Parse error : parse error, unexpected T_STRING, expecting ’)’ in c :\program files\easyphp\www\testspip\CACHE\6\agenda-29.3b5644 on line 26
j’ai spip en local, logo de survol...
OK, avec un logo de survol, c’est semble-t’il normal, je vais essayer de trouver le temps de corriger ...
salut, je sui sous spip 1.7.2 et juska maintenant je n’ ai rencontré aucun blème avec SPIP et jai toujou pu me debrouiller seul mais là ...!!!???
L’ agenda est bien installé ; je rentre mes evenemt , ki aparaissent dans l’ agenda ..je vois tou et peu naviguer d’une page a l’autre mais lorsque je clique sur l’ article ou evenement en question , il m’affiche une page blanche avec les 3 bouton de SPIP ( recaculer, statistique et modifier cet article ...)portant les liens indiquent bien article.php3 ?id_article=77
je signal ke mes articles hors agenda fonctionnentg tres bien et que j’ai bien mis la date de publi anterieur
HELP i need sommebody HEEEEEELP (the beatles)
ça y est ça marche j’avai fai une fôte de frappe de con .. et maintenant ça marche
Répondre à ce message
Pourriez vous me dire ou est définie la taille des logo événements au niveau de la structure de l’agenda.
excellent travail
Répondre à ce message
bonjour, je récidive parce que decidement j’y arrive pas... l’agenda s’affiche, mais vide, et tous ses liens (que ce soit les mois, ou l’arborescence des rubriques) ouvrent sur une page d’erreur du type :
The requested URL /monsite/agenda/2004/02/36.html was not found on this server.
a quoi ca peut bien etre dû ?
- est-ce parce que le reste du site affiche des urls du type id_article=x ?
- est-ce dû a easy php 1.7, à mes urls locales ?
ouinnn... ya quelqu’un ??
ps : je précise que j’essaye d’implanter la nouvelle version de l’agenda.html, du site gasteroprod
J’ai eu le même problème. Ca venait du fait que j’avais copié à partir du vrai fichier html sur Gasteroprod au lieu de copier à partir du code donné dans la page Gasteroprod
Tout à fait d’accord avec Marc !
j’ai eu le même problème résolu grace à sa réponse.
Mais pourquoi n’a-t-on pas eu droit au fichier ZIP joint mit à jour ???
Mais bon, Excellent boulot quand même, la mise en place n’est peut-être pas à la portée de tout le monde !
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 :
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.
Suivre les commentaires : |