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\"> </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...
Discussions par date d’activité
Une discussion
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
Bonjour
c’est justement grace à cette boucle que tu peux modifier à ta guise :
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
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
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 : |