Calendrier séquentiel 3.0 (multilingue)

Un calendrier séquentiel multilingue où 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

Pour Spip >= 1.7
Calendrier séquentiel 3.0 est l’adaptation de la version 2.0 au multilinguisme de Spip, c-a-d :
-  Un calendrier séquentiel ou les événements futurs seront affichés et classés dans l’ordre de la date de publication en ligne (leur date de début) et disparaitront une fois la date de publication antérieure (leur date de fin) dépassée..
-  Le calendrier permet la publication d’événements qui s’étendent sur plusieurs jours
-  Il obéit aux directives de langue de spip et utilise les fichiers de langues ecrire/lang/local_xx.php3
-  On utilise la date de publication en ligne comme date de départ et la date de publication antérieure comme date de fin
-  ATTENTION : L’utilisation de l’agenda nécessite l’activation de la publication des articles post-datés (Administration du site > Configuration du site > Publication des articles post-datés > Cocher : « Publier les articles, quelle que soit leur date de publication »)

Exemples

La version 3.0 est parfaitement compatible avec les anciennes versions
Deux exemples en ligne de cet agenda :
-  Cette page utilise la version 2.0 : http://www.solsoc.be/rubrique.php3?id_rubrique=48
-  Celle-ci utilise la version 3.0, configurée en français pour reproduire le même affichage que la précédente : http://robert.sebille.openbaz.be/spip/-AGENDA-Agenda-.html. La différence est que si on change la langue du site dans cette version, le calendrier s’adaptera à la langue choisie (en fonction de l’existence des fichiers local_xx.php3)

Télécharger

Version actuelle 3.0, oct 2004 à télécharger ici.
Version 2.0 : Article, sep 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 :
OBLIGATOIRES

  • 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.

Les 2 règles ci-dessous sont un choix fait dans le squelette proposé avec la distribution, vous pouvez les modifier comme vous le désirez sans compromettre le fonctionnement de l’agenda :

  • 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.

CHANGEMENTS dans 3.0 par rapport à la version 2.0 :
-  La modification du code et le fichier .inc
-  L’ajout des fichiers de langue ecrire/lang/local_xx.php3

INSTALLATION (codes ci-dessous ou dans la distrib) :

  1. Copier (ou adapter les vôtres) les fichiers local_fr.php3 et local_en.php3 dans ecrire/lang/
  2. Copier le fichier agenda-sequentiel-3.inc dans le répertoire racine de votre site spip
  3. Copier / coller les codes ci-dessous dans les squelettes html rubrique et article du calendrier

CONFIGURATION :
1) Les fichiers de langues ecrire/lang/local_xx.php3 :
Ce sont eux qui déterminent maintenant les « particules » de l’affichage de l’agenda (contrairement au précédentes versions où elles étaient codées en « dur »).

A propos des fichiers local_xx.php3, soit vous n’en n’avez pas créé, et vous pouvez uploader ceux de la distribution, sinon attention à modifier plutôt (que d’écraser ;-) les vôtres ! La doc spip sur ces fichiers local_xx.php3 est particulièrement claire et se trouve ici : http://www.spip.net/fr_article2128.html sous l’intertitre « 1. Méthode des fichiers de langue ». (A lire absolument pour les débutants ou les non familiers de php).

Pour la configuration des langues, vous devez respecter les règles de spip à ce propos, et notamment régler la gestion des langues dans l’admin de spip (au moins activer le multilinguisme), et ne pas oublier de configurer ainsi les balises html et body de vos squelettes :

<html lang="#LANG">
<body dir="#LANG_DIR">
...
</body>
</html>


L’essentiel de la doc sur la gestion des langues de spip se trouve dans cet article http://www.spip.net/fr_article2124.html et dans l’article cité au point précédent, http://www.spip.net/fr_article2128.html.

A propos du code <:variable :>
Lors de l’affichage d’un article ou d’une rubrique, ce code sera remplacé par sa traduction dans la langue de l’article ou de la rubrique ou du site (suivant config).

Dans les fichiers de cette distribution, on utilise 3 <:variable :> :
-  la particule <:le :> est fixée à ’Le ’ dans local_fr.php3 et à ’ ’ dans local_en.php3
-  la particule <:du :> est fixée à ’Du ’ dans local_fr.php3 et à ’From ’ dans local_en.php3
-  la particule <:au :> est fixée à ’ au ’ dans local_fr.php3 et à ’ till ’ dans local_en.php3

Avec « $affiche_jour = 1 ; » (v. ci-dessous), cela ecrira :
-  pour les événements d’une durée de 1 jour « Le jeudi 1 janvier 1970 » pour le français et « Thursday January 1st, 2004 » pour l’anglais,
-  et pour les événements durant plusieurs jours, « Du jeudi 1 janvier 1970 au vendredi 2 janvier 1970 » pour le français et « From Thursday January 1st, 1970 till Fruday January 2d, 1970 » pour l’anglais.

Note : Cela vous permet, en configurant adéquatement vos fichiers de langues, de créer des formules comme « Ce 1 janvier 1970 », ou « Depuis le 1 janvier 1970 jusqu’au 2 janvier 1970 », ou encore « 1 janvier 1970 => janvier 1970 », suivant votre imagination. Enfin, notez que pour ne pas afficher une particule, il suffit de la laisser vide ou la réduire à un espace (’ ’) dans le fichier ecrire/lang/local_ ??.php3 - ca dépend de l’affichage voulu.

2) L’affichage :
3 options de configurations d’affichage sont disponibles dans cette version 3.0, à partir de la variable contenue dans les codes à placer dans les squelettes rubrique et article, $affiche_jour = 0, 1 ou 2
-  $affiche_jour = 0 affiche <:le :>date ou <:du :>date1<:au :>date2. = Ne pas afficher le jour de la semaine, exemple : Le 1 janvier 1970.
-  $affiche_jour = 1 affiche <:le :>jour date ou <:du :>jour date1<:au :>jour date2. = Afficher le jour devant la date et après <:le :>, <:du :> ou <:au :> exemple : « From Thursday January 1st, 1970 till Friday January 2d, 1970 » ou « le jeudi 1 janvier 1970 ».
-  $affiche_jour = 2 affiche <:le :>date [jour] ou <:du :>date1 [jour]<:au :>date2 [jour]. = Afficher le jour après la date, exemple : « Du 1 janvier 1970 [jeudi] au 2 janvier 1970 [vendredi] ». Les [ ] sont ajoutés.


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 code de 2 fichiers de langues local_fr.php3 et local_en.php3
  4. le fichier agenda-sequentiel-3.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 
$date_pub= '[(#DATE|affdate)]';
$date_redac= '[(#DATE_REDAC|affdate)]';
$jour_pub= '[(#DATE|nom_jour)]';
$jour_redac= '[(#DATE_REDAC|nom_jour)]';

// Ces particules sont à définir dans les fichiers ecrire/lang/local_??.php3. 
$langue_le='<:le:>'; // date unique, exemple: LE 1 janvier 1970
$langue_du='<:du:>'; // dates multiples, exemple: DU 1 janvier 1970 AU 2 janvier 1970
$langue_au='<:au:>';

// Configuration de l'affichage du jour de la semaine:
// 0: <:le:>date ou <:du:>date1<:au:>date2.
// 1: <:le:>jour date ou <:du:>jour date1<:au:>jour date2.
// 2:  <:le:>date [jour] ou <:du:>date1 [jour]<:au:>date2 [jour].
$affiche_jour = 1;
 
include "agenda-sequentiel-3.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 
$date_pub= '[(#DATE|affdate)]';
$date_redac= '[(#DATE_REDAC|affdate)]';
$jour_pub= '[(#DATE|nom_jour)]';
$jour_redac= '[(#DATE_REDAC|nom_jour)]';

// Ces particules sont à définir dans les fichiers ecrire/lang/local_??.php3. 
$langue_le='<:le:>'; // date unique, exemple: LE 1 janvier 1970
$langue_du='<:du:>'; // dates multiples, exemple: DU 1 janvier 1970 AU 2 janvier 1970
$langue_au='<:au:>';

// Configuration de l'affichage du jour de la semaine:
// 0: <:le:>date ou <:du:>date1<:au:>date2.
// 1: <:le:>jour date ou <:du:>jour date1<:au:>jour date2.
// 2:  <:le:>date [jour] ou <:du:>date1 [jour]<:au:>date2 [jour].
$affiche_jour = 1;
 
include "agenda-sequentiel-3.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) 2 fichiers local_fr.php3 et local_en.php3
Attention : a créer dans ecrire/lang/ si vous n’avez pas encore ces fichiers, sinon modifier les vôtres.

local_fr.php3

<?php
$GLOBALS[$GLOBALS['idx_lang']] = array(
	'le' => 'Le ',
	'du' => 'Du ',
	'au' => ' au '
);
?>

local_en.php3

<?php
$GLOBALS[$GLOBALS['idx_lang']] = array(
	'le' => ' ',
	'du' => 'From ',
	'au' => ' till '
);
?>

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

<?php

/************************************************/
// Fonction pour formater la date de l'agenda
// Version 3.0. Pour spip >= 1.7. Multilingue.
// 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 
$date_pub= '[(#DATE|affdate)]';
$date_redac= '[(#DATE_REDAC|affdate)]';
$jour_pub= '[(#DATE|nom_jour)]';
$jour_redac= '[(#DATE_REDAC|nom_jour)]';

// Ces particules sont à définir dans les fichiers ecrire/lang/local_??.php3. 
$langue_le='<:le:>'; // date unique, exemple: LE 1 janvier 1970
$langue_du='<:du:>'; // dates multiples, exemple: DU 1 janvier 1970 AU 2 janvier 1970
$langue_au='<:au:>';

// Configuration de l'affichage du jour de la semaine:
// 0: <:le:>date ou <:du:>date1<:au:>date2.
// 1: <:le:>jour date ou <:du:>jour date1<:au:>jour date2.
// 2:  <:le:>date [jour] ou <:du:>date1 [jour]<:au:>date2 [jour].
$affiche_jour = 1;
 
include "agenda-sequentiel-3.inc";
?>
<?php echo $dateaffiche; ?>
*****/
// Auteur: robert.sebille(at)cassiopea.org - oct 2004 
// Sous licence GNU/GPL http://www.gnu.org/copyleft/gpl.html 
/************************************************/

switch ($affiche_jour) {
	case 0:
		if ($date_pub == $date_redac) {$dateaffiche = $langue_le.$date_pub;} 
			else {$dateaffiche = $langue_du.$date_pub.$langue_au.$date_redac;}
		break;
	case 1:
		if ($date_pub == $date_redac) {$dateaffiche = $langue_le.$jour_pub." ".$date_pub;} 
			else {$dateaffiche = $langue_du.$jour_pub." ".$date_pub.$langue_au.$jour_redac." ".$date_redac;}
		break;
	case 2:
		if ($date_pub == $date_redac) {$dateaffiche = $langue_le.$date_pub."  [".$jour_pub."]";} 
			else {$dateaffiche = $langue_du.$date_pub."  [".$jour_pub."]".$langue_au.$date_redac."  [".$jour_redac."]";}
		break;
	}	

?>

Remarque de mise à jour :

Pour ceux qui avait implémenté la version 1.0 ou 2.0 et qui souhaite passer à la 3.0 (ATTENTION : votre version de spip doit être >= 1.7 !), voici ce qu’il y a à faire :

  1. Par précaution, faites un backup de vos squelettes rubrique et article de l’agenda.
  2. Activez le multilinguisme dans l’administration de spip
  3. Configurez ainsi les balises html et body de vos squelettes (au moins de l’agenda) :
    <html lang="#LANG">
    <body dir="#LANG_DIR">
    ...
    </body>
    </html>
  4. Procédez à une installation normale
    1. Copier (ou adapter les votres) les fichiers local_fr.php3 et local_en.php3 dans ecrire/lang/
    2. Copier le fichier agenda-sequentiel-3.inc dans le répertoire racine de votre site spip
    3. Copier / coller les codes ci-dessous dans les squelettes html rubrique et article du calendrier
  5. Testez si ca fonctionne, vous convient..
    1. Si oui : vous pouvez supprimer vos backup des squelettes agenda et le fichier agenda-sequentiel.inc (attention, pas agenda-sequentiel-3.inc)
    2. Si non, et si vous souhaitez revenir à la version 2.0 (ou 1.0) : écrasez les squelettes agenda 3.0 avec ceux de votre backup des squelettes agenda de la 2.0 (ou 1.0). Supprimez le fichier agenda-sequentiel-3.inc (attention, pas agenda-sequentiel.inc).

Notes

[1Remarque technique : Le code contenu dans « agenda-sequentiel-3.inc » est beaucoup plus court que celui de la version 2.0 (agenda-sequentiel.inc), car le formatage des dates est cette fois réalisé par spip à travers les filtres |affdate et |nom_jour

Discussion

4 discussions

  • Bonjour,

    Malgré tout mes essais répétés, le squelette 3.0 ne tient pas compte du multilingue. Il n’affiche pas du et au alors que je les utilise ailleurs dans le site, et qu’ils s’affichent sans aucun problème. Bien sur, le dir#lang etc sont bien remplis, je crois n’avoir rien oublié. Je suis en version SPIP 1.8.3.

    Quelqu’un aurait il une idée pour m’indiquer comment faire ?

    Répondre à ce message

  • merci cela marche très bien.

    J’utilise WAneswletter avec le « plugin » spip et malheureusement le code php

    <?php 
    $date_pub=  
    ...
    include "agenda-sequentiel-3.inc";
    ?>

    n’est pas pris en compte dans l’envoi des nouveautés (ni au format html ni au format texte). Donc la date affichée est toujours la date du jour.

    Ce qui n’est peut être pas étonnant mais un peu dérangeant pour l’annonce d’événements.
    catherine

    Répondre à ce message

  • Sa. Cha.

    Lorsque l’annonce de l’événement comporte une heure, on voudrait bien qu’elle s’indique aussi. Pour cela, la v. 1.8.2 permet d’ajouter l’heure à la date ainsi qu’à la date de rédaction antérieure.

    Seulement, si l’événement n’en comporte pas, il ne faut pas afficher « à 00 h 00 ». Voici la solution qui fonctionne à http://www.protestanet.be/sp/rubrique1.html

    Dans le squelette agenda (chez moi, il s’appelle rubrique-1.html), après la ligne

     $jour_redac= '[(#DATE_REDAC|nom_jour)]';

    ajouter ces quelques lignes

    $heure_pub= '[(#DATE|heures)]'.' h '.'[(#DATE|minutes)]';
    $heure_redac= '[(#DATE_REDAC|heures)]'.' h '.'[(#DATE_REDAC|minutes)]';
    
    if ('[(#DATE|heures)]' == '00' and '[(#DATE|minutes)]' == '00') {$heure_pub = '';}
    else
      {$heure_pub= ' à [(#DATE|heures)]'.' h '.'[(#DATE|minutes)]';}
    
    if ('[(#DATE_REDAC|heures)]' == '00' and '[(#DATE_REDAC|minutes)]' == '00') {$heure_redac = '';}
    else
      {$heure_redac= ' à [(#DATE_REDAC|heures)]'.' h '.'[(#DATE_REDAC|minutes)]';}

    Dans le fichier agenda-sequentiel-3.inc, remplacer le « case 1 » par

       case 1:
           if ($date_pub == $date_redac)
             {$dateaffiche = $langue_le.$jour_pub." ".$date_pub.$heure_pub;}
           else
             {$dateaffiche = $langue_du.$jour_pub." ".$date_pub.$heure_pub.$langue_au.$jour_redac." ".$date_redac.$heure_redac;}
           break;

    Merci à Robert pour le coup de pouce.

    Répondre à ce message

  • 1

    Testé et approuvé, merci.

    • Pour fonctionner tout à fait pleinement, donc n’indiquer que la date de l’évenement et non la période...
      Dans agenda-sequentiel-3.inc, modifier le test par

      switch ($affiche_jour)
      case 0 :
      if (strcmp ($date_pub , $date_redac)) $dateaffiche = $langue_le.$date_pub ;
      else $dateaffiche = ’0’.$langue_du.$date_pub.$langue_au.$date_redac ;
      break ;
      case 1 :
      if (strcmp ($date_pub , $date_redac)) $dateaffiche = $langue_le.$jour_pub." « .$date_pub ;
      else $dateaffiche = ’1’.$langue_du.$jour_pub. » « .$date_pub.$langue_au.$jour_redac. » « .$date_redac ;
      break ;
      case 2 :
      if (strcmp ($date_pub , $date_redac)) $dateaffiche = $langue_le.$date_pub. » [« .$jour_pub. »]" ;
      else $dateaffiche = ’2’.$langue_du.$date_pub.« [ ».$jour_pub.« ] ».$langue_au.$date_redac.« [ ».$jour_redac.« ] » ;
      break ;

    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