Encore un calendrier !

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

Oui je sais encore un petit calendrier.

Je reste un ancien et modeste utilisateur de spip mais néanmoins fidèle , et au train ou vont les choses je suis comme certains, dépassé. Je propose donc un calendrier propre fonctionnel et surtout trés facile à utiliser pour ceux qui ont peu de temps pour réaliser des sites mais qui souhaitent avoir des fonctionnalités faciles à mettre en oeuvre sans trop rentrer dans le code php mais qui maîtrisent un peu les boucles spip. En effet il suffit d’une simple boucle permettant de sélectionner les données à afficher en ajustant la syntaxe propre au calendrier et c’est terminé. Une liste est créée et celle ci est gérée directement par le calendrier.

Inspiré du calendrier de Yannick Volglaire

Merci à Jacques J. pour le problème de l’affichage des dates.

Un exemple :
http://www.geea.org/inc-mini-calendrier2.php3

Description

2les CSS2

<style type="text/css" media="screen">
a.entete {
    color: #fff;
}
table.calendrier {
font-size:11px;
color:white;
}
calendrierMoisAnnee {
text-align : center;
}
th.calendrier {
    text-align: center;
    width: 28px;
    height: 12px;
    background-color: #ffffff;
}
td.calendrierVide {
    text-align: center;
    width: 18px;
    height: 21px;
    background-color: #ffffff;
}
td.calendrierNormal {
    text-align: center;
    width: 18px;
    height: 21px;
    background-color: #eeeeee;
}
td.calendrierLien {
    text-align: center;
    width: 18px;
    height: 21px;
    background-color: #e0e7ee;
    font-weight: bold;  
}
td.calendrierPendant {
    text-align: center;
    width: 18px;
    height: 21px;
    background-color: #e0e7ee;  
}
#aujourdhui {
    border: 1px solid black;
}
</style>

2l’affichage du calendrier2

<?php
  function afficher_calendrier_mois($mois, $annee, $jours) {
    $nom_mois = array(1 => "Janvier", "Février", "Mars", "Avril", "Mai", "Juin",
                      "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre");
    // Correspondance entre la semaine commencant par Dimanche et celle commencant par Lundi
    $num_jour_belge = array(7, 1, 2, 3, 4, 5, 6);
    $premier_jour_du_mois = $num_jour_belge[date("w", mktime(0, 0, 0, $mois, 1, $annee))];
    $nombre_de_jours_du_mois = date("t", mktime(0, 0, 0, $mois, 1 ,$annee));
    $aujourdhui = date("dm");

    
    echo "<div class=\"calendrierMoisAnnee\">".$nom_mois[(int) $mois]." - ".$mois." - ".$annee."</div>\n";  
    echo "<table class=\"calendrier\" align=\"center\" cellspacing=\"1\" border=\"0\">\n";
    echo "<tr><th class=\"calendrier\">L</th><th class=\"calendrier\">M</th>";
    echo     "<th class=\"calendrier\">M</th><th class=\"calendrier\">J</th><th class=\"calendrier\">V</th>";
    echo     "<th class=\"calendrier\">S</th><th class=\"calendrier\">D</th></tr>\n";
    
    /* pour avoir un toujours un mois en 2 chiffres
     * pour la comparaison plus loin : if ($jour_du_mois.$mois == $aujourdhui)
     * car $aujourdhui est de la forme jjmm */
    $mois = ($mois < 10 ? "0".((int) $mois) : $mois);

    $jour_du_mois = 1;
    for ($semaine = 0; $semaine <= 5 && $jour_du_mois <= $nombre_de_jours_du_mois; $semaine++) {
      echo "<tr>\n";
      for ($jour = 1; $jour <= 7; $jour++) {
        if ($jour + 7 * $semaine < $premier_jour_du_mois || $jour_du_mois > $nombre_de_jours_du_mois) {
          echo "  <td class=\"calendrierVide\">&nbsp;</td>\n";
        } elseif(ereg("article",$jours[$jour_du_mois])) {
          echo "  <td class=\"calendrierLien\"";
          if ($jour_du_mois.$mois == $aujourdhui) echo " id=\"aujourdhui\"";
          echo "><a href=\"".$jours[$jour_du_mois]."\">$jour_du_mois</a></td>\n";
          $jour_du_mois++;
        } elseif($jours[$jour_du_mois] == "pendant") {
          echo "  <td class=\"calendrierPendant\"";
          if ($jour_du_mois.$mois == $aujourdhui) echo " id=\"aujourdhui\"";
          echo ">$jour_du_mois</td>\n";
          $jour_du_mois++;
        } else {
          echo "  <td class=\"calendrierNormal\"";
          if ($jour_du_mois.$mois == $aujourdhui) echo " id=\"aujourdhui\"";
          echo ">$jour_du_mois</td>\n";
          $jour_du_mois++;
        }
      }
      echo "</tr>\n";
    }
    
    echo "</table>\n";
  echo "<hr />\n";
	
  }
?>

2la boucle créant la liste2

<?php
<BOUCLE_articles(ARTICLES){par date}>
 $moisE = (int) '[(#DATE|mois)]';   // transforme date en entier

 $jours[[(#DATE|affdate{'annee'})]][$moisE][[(#DATE|affdate{'d'})]]  = "[(#URL_ARTICLE)]";

</BOUCLE_articles>


  while (list($annee, $tous_les_mois) = each($jours)) {
    while (list($mois, $jours_du_mois) = each($tous_les_mois)) {
      afficher_calendrier_mois($mois, $annee, $jours_du_mois);
    }
  } 
?>

C’est cette boucle qu’il faut paramétrer suivant vos besoins, tout le reste n’est que du copier/coller au bon endroit :

<BOUCLE_articles(ARTICLES){par date}>
 $moisE = (int) '[(#DATE|mois)]';   // transforme date en entier

 $jours[[(#DATE|affdate{'annee'})]][$moisE][[(#DATE|affdate{'d'})]]  = "[(#URL_ARTICLE)]";

</BOUCLE_articles>

peut être remplacée par celle que vous souhaitez forum, brèves...

note Spip-contrib cette contrib utilise du php dans le squelette, ce qui n’est pas forcément souhaitable (en particulier pour le fonctionnement du cache de SPIP). Pour mémoire d’autres solutions plus pérennes à terme sont possibles :
-  cf. http://www.spip.net/fr_article3182.html : SPIP depuis la 1.8.2 permet de visualiser dans l’espace public des calendriers avec le même affichage que celui de l’espace privé, et plus généralement de construire des agendas quelconques bénéficiant des outils de mises en pages de ces calendriers. Cette possibilité est fournie par un nouveau critère de boucle et trois nouveaux filtres.
-  le plugin calendrier_mini (en phase "test" en nov 2006, consulter le fichier « plugin.xml » associé pour une documentation succinte)
-  le plugin Agenda qui, il est vrai, dépasse le seul cadre d’usage de la présente contribution

Dernière modification de cette page le 3 avril 2012

Discussion

Une discussion

  • 2

    Bonjour
    Très bonne contrib’ ;-) Mais voilà, à chaque fois qu’on clique sur un jour, il n’affiche qu’une seule actu... Comment faire pour que l’on soit dirigé vers toutes les actus d’une journée ? J’ai en effet l’habitude de poster plusieurs articles par jour.
    Merci pour votre réponse !

    Mickaël

    • Philippe

      Bonjour
      c’est justement grace à cette boucle que tu peux modifier à ta guise :


      $moisE = (int) ’(#DATE ; // transforme date en entier

      $jours [1][$moisE] [2] = « [(#URL_ARTICLE)] » ;

      Rien ne t’empeche de mettre une boucle conditionnelle avec compteur par exemple et si le compteur est supèrieur à 1 de renvoyer vers une page d’un squelette dans lequel tu fait passer la date en critere et ainsi tu liste les articles à cette date.
      Cordialement

    • Philippe

      Oups je viens de cliquer trop vite et les boucle n’apparaissent pas dans le quote. Je parlais en fait de la derniere boucle :

      $moisE = (int) ’(#DATE ; // transforme date en entier

      $jours [1][$moisE] [2] = « [(#URL_ARTICLE)] » ;

    Répondre à ce message

Ajouter un commentaire

Qui êtes-vous ?

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