Calendrier séquentiel

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Un calendrier séquentiel ou les évènements futurs seront affichés et classés dans l’ordre de leur date de début et disparaitront une fois leur date de fin dépassée.

Description

  • Le calendrier permet la publication d’événements qui s’étendent sur plusieurs jours
  • On utilise la date de publication en ligne comme date de départ et la date de publication antérieure comme date de fin.
  • Les évènements disparaitront une fois leur date de fin dépassée.

-  ATTENTION : L’utilisation de l’agenda nécessite l’activation de la publication des articles post-datés.

Exemples

Deux exemples en ligne de cet agenda :

Télécharger

Version actuelle : version 2.0, sept 2003 à télécharger ici.

Adresse de publication originale :
http://support.cassiopea.org/spip/spip-tech.shtml#agenda

Pour ceux qui veulent en savoir plus :

Règles d’écriture de l’agenda :

  • La Date de publication en ligne = la date de DEBUT de l’événement (événement durant 1 ou plusieurs jours). Obligatoire.
  • La Date de publication antérieure = la date de FIN de l’événement (événement durant 1 ou plusieurs jours). Obligatoire.
  • Le Surtitre = le nom de l’organisateur.
  • Le Sous-titre = le lieu de l’événement.

Démarche pour les dates de l’agenda :

  1. Ecrire l’événement normalement
  2. Fixer la date de fin (DATE DE PUBLICATION ANTÉRIEURE)
  3. Publier l’événement en ligne
  4. Fixer la date de début (DATE DE PUBLICATION EN LIGNE)
    Note : Vous devez publier en ligne l’événement avant de pouvoir fixer sa date de publication en ligne (début), car cette dernière n’est modifiable qu’après cette action.

Les codes de cette contribution

  1. le code + la boucle à copier / coller dans la page rubrique du calendrier.
  2. le code + la boucle à copier / coller dans la page article du calendrier.
  3. le fichier agenda-sequentiel.inc à télécharger dans le répertoire racine de votre site spip (là où il y a les squelettes .php3). [1]

1) Le code + la boucle à copier / coller dans la page rubrique

<B_articles>
	<b>Evénements</b><br><br>
	<ul>
	<BOUCLE_articles(ARTICLES){id_rubrique}{par date}{age_redac<=0}>

<?php 
// Récupération et formatage des dates de l'événement
$datep= '#DATE'; 
$dater = '#DATE_REDAC'; 
include "agenda-sequentiel.inc";
?>

	<li><b><?php echo $dateaffiche; ?></b>[<b> à (#SOUSTITRE|supprimer_tags).</b>]
	[<br><i>Organisé par (#SURTITRE|supprimer_tags)</i>]
	[<br><A HREF="#URL_ARTICLE">(#TITRE)</a>]
	[<br>(#DESCRIPTIF)] 
	<hr class="spip">

	</BOUCLE_articles>
	</ul>
</B_articles>
	<br>Il n'y a pas d'événements au calendrier.
<//B_articles>

2) le code + la boucle à copier / coller dans la page article

<BOUCLE_evenement(ARTICLES){id_article}>

	<h1>[(#TITRE|supprimer_numero)]</h1>

<?php 
// Récupération et formatage des dates de l'événement
$datep= '#DATE'; 
$dater = '#DATE_REDAC'; 
include "agenda-sequentiel.inc";
?>

	<b><?php echo $dateaffiche; ?>[ à (#SOUSTITRE|supprimer_tags)]</b>
	[<br><i>Organisé par (#SURTITRE|supprimer_tags)</i>]<br><br>

	[(#CHAPO|justifier)<br><br>]

	[(#TEXTE|justifier)<br><br>]

	[<P><i>(#PS|justifier)</i>]

	[<HR class="spip" width="25%" align="left">(#NOTES)]
			
</BOUCLE_evenement>

3) Le code contenu dans « agenda-sequentiel.inc »

<?php

/************************************************/
// Fonction pour formater la date de l'agenda
// ATTENTION: La publication des articles post-datés doit être activée (Administration du site)
// La date de publication = date de départ, la date de publication antérieur = date de fin
// Les articles dans les boucles sont classés par date de publication
// Le code ci-dessous doit se trouver dans les boucles articles des squeletes rubrique et article adéquat
/*****
<?php 
$datep= '#DATE'; 
$dater = '#DATE_REDAC'; 
include "agenda-sequentiel.inc";
?>
<?php echo $dateaffiche; ?>
*****/
// Auteur: robert.sebille(at)cassiopea.org - sept 2003 
// Sous licence GNU/GPL http://www.gnu.org/copyleft/gpl.html 
/************************************************/

$mois["January"] = "janvier";
$mois["Febrary"] = "février";
$mois["March"] = "mars";
$mois["April"] = "avril";
$mois["May"] = "mai";
$mois["June"] = "juin";
$mois["July"] = "juillet";
$mois["August"] = "août";
$mois["September"] = "septembre";
$mois["October"] = "octobre";
$mois["November"] = "novembre";
$mois["December"] = "décembre";

$jour=array("dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"); 

$datep=strtotime($datep);
$msp = date("F", $datep);	
$jrp=date("w", $datep); // jour de la semaine 
$datepub=date("l j F Y",$datep);
$datepub=str_replace(date("F", $datep), $mois[$msp], $datepub);
$datepub=str_replace(date("l", $datep), $jour[$jrp], $datepub); 

$dater=strtotime($dater);
$msr = date("F", $dater);
$jrr=date("w", $dater); // jour de la semaine 
$dateredac=date("l j F Y",$dater);
$dateredac=str_replace(date("F", $dater), $mois[$msr], $dateredac);
$dateredac=str_replace(date("l", $dater), $jour[$jrr], $dateredac); 

if ($datep == $dater) {$dateaffiche = "Le ".$datepub;} else {$dateaffiche = "Du ".$datepub." au ".$dateredac;}


?>

Remarque de mise à jour :

Pour ceux qui avaient implémenté la version 1.0 et qui souhaitent passer à la version 2.0 :

Le passage de la 1.0 à la 2.0 prend 2 minutes, voici ce qu’il y a à faire :

1) Uploader le fichier « agenda-sequentiel.inc » dans le répertoire racine de votre site spip (là où il y a les squelettes .php3).

2) Dans le code des squelettes .html rubrique ET article de l’agenda, remplacer

les anciennes lignes :

// getDateAgenda est dans mes_fonctions.php3
$datep= '#DATE'; 
$dater = '#DATE_REDAC'; 
$dateaffiche = getDateAgenda($datep, $dater);

par ces nouvelles :

// Récupération et formatage des dates de l'événement
$datep= '#DATE'; 
$dater = '#DATE_REDAC'; 
include "agenda-sequentiel.inc";

3) Supprimer le code de la fonction « getDateAgenda(.. » de votre fichier mes_fonctions.php3. (ce dernier point n’est pas obligatoire, mais inutile de charger du code devenu inutile).

Notes

[1Remarque : Changements dans la version 2.0 par rapport à la version 1.0 : l’appel de fonction qui provoquait la Fatal error : Call to undefined function : getDateAgenda() sur certains sites a été supprimé et remplacé par un fichier inclus (agenda-sequentiel.inc) qui contient le code (qui n’est donc plus dans mes_fonctions.php3)

Dernière modification de cette page le 5 décembre 2006

Discussion

11 discussions

  • serrurier pas cher paris

    Avez-vous une version plus récente de cet article ? Patricia pour serrurerie

    Répondre à ce message

  • 1

    Bonjour, pardonnez mon ignorance, mais je ne comprends vraiment pas comment utiliser ce calendrier. J’ai du faire un impasse sur le fonctionnement général de spip, que j’arrivais néamoins à utiliser selon mes besoins auparavant. J’aimerais tout simplement installer un agenda sur une page de mon site. Ce que je ne comprends pas, c’est dans quelle pages article et rubrique je dois copier/coller ces codes... En effet, je n’ai jamais utilisé de page rubrique sur mes sites...

    Je pense donc qu’une explication plus détaillée de l’installation serait nécessaire, ne serait-ce que pour permettre au gens qui ne maitrisent pas bien le fonctionnement de spip de le comprendre un petit peu mieux...

    Merci.

    • Effectivement, votre question concerne le fonctionnement de spip, pas celui du calendrier. La réponse à votre question existe dans la documentation de spip http://www.spip.net/fr_article877.html sous l’intertitre « Une interface différente dans le même site ». Je vous conseille cependant de lire l’entièreté de l’article.

      Attention à ceci : n’utilisez pas le code à copier/coller présent sur cette page, il y a une erreur pour le mois de février (décrite dans le message 4). Utilisez le téléchargement « Version actuelle : version 2.0, sept 2003 à télécharger ici . »

    Répondre à ce message

  • 9

    Moi j’ai un problème avec ce script.

    Lorsque je poste un article, il me met toujours « le jeudi 1 janvier 1970 » au lieu de ce qui est prévu soit du jour mois année au jour moi année.

    Quelqu’un peut il m aider ?
    ps : j ai la dernière version de spip et du script, et pas de mes_fonctions.php3

    • Pas facile de répondre comme ça, mais suggestion de vérifications à faire :
      as tu bien écrit ou copié/collé
      le code

      <?php 
      // Récupération et formatage des dates de l'événement
      $datep= '#DATE'; 
      $dater = '#DATE_REDAC'; 
      include "agenda-sequentiel.inc";
      ?>

      dans une boucle article ?

      et le code <?php echo $dateaffiche; ?> en dessous du précédent, aussi dans la boucle article et à la place où doi(ven)t s’afficher le(s) date(s) ?

      Enfin, est-ce que tu as bien respecté la syntaxe et les noms ? Tout doit y être « tel quel », les même noms de variable, la casse (minuscule/MAJUSCULES), les ; (points-virgules), etc.

    • Oui oui j’ai bien tout recopié sans rien changé pour voir si ça marchait :/

      J’ai un autre problème depuis que je suis passée à la version 1.7, dans le calendrier interne de l’administration ...

      -  Warning : Variable used in global statement already exists in the function in your script on line 11
      -  Warning : Bad arguments to join() in your script on line 222

    • J’ai résolu la première erreur lié au calendrier de spip version 1.7, un des arguments étant défini deux fois dans les fichiers :
      -  calendrier.php3
      -  calendrier_semaine.php3

      Mais ça ne résout toujours pas mon problème d’agenda :(

      Mon hébergeur est online je précise sait on jamais qu’ils aient encore inventé un truc pour nous empêcher de faire ce qu’on veut ...

    • J’ai testé un autre truc en affichant #DATE et #DATE_REDAC qu’il me récupère bien mais visiblement sans éxecuter le code php d’ou le problème.

      Comment puis je résoudre ce truc immonde ? J’y arrive vraiment pas :/

    • Bonjour,
      j’ai exactement le même probleme de date : tout s’affiche au 1 janvir 1970
      l’hébergeur est aussi online et j’utilise
      la version 1.6

      peux-tu détailler comment tu as résolu
      le problème

      merci
      catherine

    • pierre maillet

      J’ai repéré le problème au niveau de la ligne suivante :

      $datep=strtotime($datep) ;
      dans « agenda-sequentiel.inc »

      Avant la ligne la variable $datep est correcte,après la ligne elle prend la valeur de -1.

      Très bizarre puisque cela fonctionne très bien en local avec easyphp 1-7

    • (S’il s’agit bien de la version 2.0 :)
      strtotime essaye de lire une date au format anglais. Il est possible que ton serveur en ligne soit configuré pour produire des dates dans un autre format ; alors strtotime retourne -1, son code d’erreur.

      tu peux essayer (g bien dit essayer ;-), car ca ne fonctionnera que si la locale anglais est installée sur le serveur en ligne, de forcer ce serveur à renvoyer un format anglais, avec le code suivant dans les squelettes rubrique et article :

      <?php 
      // Récupération et formatage des dates de l'événement en anglais
      setlocale(LC_TIME, "en");
      $datep= '#DATE'; 
      $dater = '#DATE_REDAC'; 
      include "agenda-sequentiel.inc";
      // annulation formatage précédent des dates
      setlocale(LC_TIME, "");
      ?>

      Robert

    • pierre maillet

      Cela ne marche pas,
      pour info voilà les résultats affichés :

      echo $datep ;
      // donne 2005-01-31
      $datep = strtotime($datep) ;
      echo $datep ;
      //donne 00:00:00-1

    • Le premier echo $datep ; // donne 2005-01-31 , étant initialisé à #DATE devrait normalement donner une date au format MySql : « 2001-12-01 HH:MM:SS » ou HH:MM:SS sont respectivement les heures, minutes et secondes de la date, et non 2005-01-31 qui va générer une erreur de strtotime.
      V. : http://www.spip.net/fr_article1971.html

      Pour ton site, on peut alors essayer ceci : Remplacer (dans article et rubrique)

      $datep= '#DATE';
      $dater = '#DATE_REDAC'; 

      par

      $datep= '#DATE 00:00:00';
      $dater = '#DATE_REDAC 00:00:00'; 

      Attention : 0 = le chiffre zéro (pas la lettre O) et il faut vérifier s’il faut 1 espace ou pas entre #DATE, #DATE_REDAC et 00:00:00 pour obtenir le format adéquat.

      Enfin, si tout cela ne marche pas, tu peux essayer le calendrier 3.0 que g proposé à la publication sur ce site, mais c tout récent et il est encore dans la « cuisine ». La version 3.0 est l’adaption au multilinguisme de spip. Elle évitera ce problème, mais attention, elle est un peu plus complexe à configurer, emploie les fichiers locaux de langue et exige une version spip >= 1.7.

      Si tu veux essayer, tu peux la télécharger ici :
      http://support.cassiopea.org/spip/agenda3.zip

      Robert

    Répondre à ce message

  • Stéven

    Salut
    Merci pour cette contrib, ces quelques boucles sont très bien adaptées à un agenda de type « manifestations ».
    Pas de problème pour la mise en place sous SPIP 1.7...

    Répondre à ce message

  • J’ai regardé la syntaxe de l’agenda séquentiel
    A la page sommaire j’ai mon lien vers la rubrique agenda id=4
    Je colle le code dans la page rubrique-ag.html (différent autres rubriques)
    Je colle le code dans la page article-ag.html après je suis un peu pommé. Pourrais-til y avoir une explication plus détaillée.

    Répondre à ce message

  • 4
    asso.bachant

    POURQUOI ?

    Evénements

    Parse error : parse error, unexpected $ in /home/users/b/bachant/www/agenda-sequentiel.inc on line 41

    essazicalendar

    LIGNE 41
    $datepub=str_replace(date(« l », $datep), $jour[$jrp], $datepub) ;

    • bon ça fonctionne presque, a part le petit bug de la ligne 41

      une petite question, je souhaite crer dans mon agenda des sous rubriques et pouvoir les afficher.

      rubrique agenda

      evenements quelconque

      sous-rubrique foot -> les matchs

      sous-rubrique judo -> les competitions

      or la ne s’affiche que evnement quelconque, ou faire la modif pour afficher les matchs et les compet.

      suis je assez clair !

    • pb de la ligne 41 résolue

    • asso.bachant

      c’est d’enfer ça fonctionne.

      agenda couplé aux annonces séquentiel !

    • asso.bachant

      j’ai crié victoire trop vite

      a priori les news s’affiche en permanence

      date de pub en ligne : date de début de l’evenement
      date de pub antérieur : fin de l’evenement

      ors quel que soit la date de pub en ligne, l’evenement s’affiche.

      j’ai modifié cet ligne
      <BOUCLE_articles(ARTICLES)id_rubriquepar dateage_redac<=0>
      par
      <BOUCLE_articles(ARTICLES)id_rubrique !==^(20)$par dateage_redac<=0>

      afin d’afficher les sous rubriques de la rubrique agenda.

      serait ce cette modif qui pertube ?

    Répondre à ce message

  • Christophe

    Bravo pour cette boucle, malheureusement elle ne fait que pallier à un gros défaut de SPIP (le seul heureusement) : il faut valider l’article avant de pouvoir modifier la date => être administrateur.
    Il manque à SPIP un vrai gestionnaire d’agenda séquentiel...
    Avec ça il serait parfait, déjà que...

    Répondre à ce message

  • 1

    Bonjour,
    Je teste en local le calendrier, sans succès.
    J’obtiens toujours « il n’y a pas d’événement » lorsque je demande à voir la rubrique abritant le calendrier.

    -  J’ai créé à la racine du site une rubrique « agendas » (n°18) ; puis j’ai créé une sous-rubrique « vacances » (n°19).
    -  J’ai fait un article pour la rubrique « agenda » (date de public. = ce jour / date de fin = demain)
    -  J’ai bien déclaré dans l’interface privé l’affichage des dates de public. antérieure.
    -  J’ai créé un squel. article-18.html + un squel. rubrique-18.html + article-18.php3 + rubrique-18.php3
    -  le fichier « agenda-séquentiel.inc » est bien à la racine avec les autres squelettes.
    Le squel. article fonctionne lorsque j’arrive directement sur cet article. Rien à faire pour le squelette rubrique-18.

    Une idée ?

    • J’ai créé un squel. article-18.html + un squel. rubrique-18.html + article-18.php3 + rubrique-18.php3
      Pourquoi article-18.php3 + rubrique-18.php3 ? les -18.html suffisent. Essaie de les supprimer ?

      Note : il faut aussi corriger un petit bug (ou télécharger la version 16/11/2003) : Dans agenda-sequentiel.inc il faut corriger Febrary par February

      Cortdialement,
      Robert

    Répondre à ce message

  • 1

    merci pour ce travail ! si j’en juge par les deux urls-exemple ;) parce que chez moi, en local, ça ne marche pas :

    pourtant

    1. la date de publication antérieure est autorisée
    2. les boucles sont copiées respectivement dans un rubrique-33.html (ma sous-rub calendrier) et dans un article-33.html (squel particulier et dépendant de la rubrique 33 c’est bien ça ?)
    3. le cache de spip et celui du navigateur sont vidés
    4. un article a été *publié* dans la rubrique 33

    mais

    la page rubrique m’affiche toujours « Il n’y a pas d’événements au calendrier. »

    mmmh :-/

    jc

    Répondre à ce message

  • 5

    Bonjour,
    Merci pour tout ce que vous faites.
    J’ai récupérer la version 2.0 d’« agenda séquentiel ».
    Je suis en train de faire des tests en local et j’ai un bug au niveau de l’affichage du mois de février :
    j’ai mis un événement du 25 février 2003 au 10 octobre 20003 et le résultat affiche :

    « Du mardi 25 2003 au vendredi 10 octobre 2003 à Le grand palais. »

    Apparemment (je n’ai pas fait tous les mois) cela ne concerne que « février ».

    Où est le bug (qui se retrouve dans la page article). Je n’ai rien vu de bizarre dans « agenda-sequentiel.inc ».

    Autre chose, mais là , ce n’est pas un bug, lorsque mon lieu commence par « Le » quelque chose on se retrouve avec « à Le » ce qui peut passer pour un nom propre(quoique à Le Grand Palais" c’est bof bof, mais lorque on veut mettre le restaurant Machin ....que faut-il modifier et où.

    merci encore

    • -  le mois février est un mois avec un « é ». voir si le problème se pose également avec décembre, et si oui, essayer de remplacer é par eacute; dans le tableau des mois de agenda-sequentiel.inc ou de mettre sur le site spip un set de caractère comme le iso-8859-1

      > lorsque mon lieu commence par « Le »... que faut-il modifier et où
      Ca se trouve dans les boucles spip elles-memes, des squelettes rubrique et article de l’agenda :
      <b><?php echo $dateaffiche; ?></b>[<b> à ...

      cordialement,
      robert

    • Merci,

      Mais j’ai vérifié pour tous les mois avec accents (mon charset est bien à iso-8859-1), le bug se trouve bien uniquement sur février (ça passe bien pour août et décembre).

      Le « eacute ; » dans agenda-sequentiel.inc ne corrige rien (eacute ; apparaît alors tel quel). Y aurait-il d’autres spipeurs avec le même problème ?

      D’autre part pour le « à » je l’avais bien remarqué dans la boucle, mais ce qu’il faudrait c’est un petit script du genre « if le mot suivant =le , alors « au », if le mot suivant =les alors « aux », sinon « à »..... » mais ça je ne sais pas vraiment faire .

      Sinon je remplacerai par « lieu : »

      emma92

    • J’ai trouvé :
      Dans agenda-sequentiel.inc il faut corriger Febrary par February !....

      Par contre j’aimerais bien savoir pour quoi sur les deux sites cités lorsque l’événement a lieu sur 1 jour cela affiche bien « Le XX mois année » et chez moi alors que je ne mets pas de date antérieure (non afficher donc) cela affiche « Du xx mois année au (date de mise en ligne) ». Quelqu’un aurait-il une idée ?
      Merci.
      Sinon, c’est super.

    • J’ai trouvé en relisant le code de agenda-sequentiel.inc.

      C’est tout bête mais il serait utile de le rajouter dans l’explication : lorsque l’événement se passe sur une seule journée, il suffit de mettre la même date à la date antérieure...cqfd....

      Reste à résoudre le problème de « à » , « au », « à l’ », « à la » ....

    • > J’ai trouvé : Dans agenda-sequentiel.inc il faut corriger Febrary par February !....
      Oui, stupide erreur de ma part ;-) je corrigerai la version en ligne dès que je peux.

      > C’est tout bête mais il serait utile de le rajouter dans l’explication : lorsque l’événement se passe sur une seule journée, il suffit de mettre la même date à la date antérieure...cqfd....

      Euh, c dans l’article ci-dessus et dans la doc accompagnant le package ... ;-)
      « Règles d’écriture de l’agenda :
      -  La Date de publication en ligne = la date de DEBUT de l’événement (événement durant 1 ou plusieurs jours). Obligatoire.
      -  La Date de publication antérieure = la date de FIN de l’événement (événement durant 1 ou plusieurs jours). Obligatoire.
      -  Le Surtitre = le nom de l’organisateur.
      -  Le Sous-titre = le lieu de l’événement. »

      Cordialement,
      Robert.

    Répondre à ce message

Ajouter un commentaire

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