Calendrier dans la sidebar
Bonjour à tous.
Je cherche à mettre un calendrier (dans la sidebar par ex.) avec les dates, cliquables, des articles publiés avec défilement des mois précédents.
Je n'ai pas encore cherché à le faire, j'y pense juste. Si vous avez des idées je suis preneur.
Bonne journée.
Je cherche à mettre un calendrier (dans la sidebar par ex.) avec les dates, cliquables, des articles publiés avec défilement des mois précédents.
Je n'ai pas encore cherché à le faire, j'y pense juste. Si vous avez des idées je suis preneur.
Bonne journée.
0
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Faut que je retrouve ça, que je le mette à jour pour la 4.2 et que je vérifie si ça fonctionne
Je te tiens au courant
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Alors voilà...
1. Créer à la racine de ton pluxml un dossier plugins
2. Dans ce dossier créer un dossier calendar
3. Dans ce dossier créer un fichier class.plx.calendar.php et colle dedans le code suivant
<?php /** * Classe plxCalendar * * @version 1.0 * @package PLX * @author Stephane F **/ class plxCalendar { /** * Constructeur qui prend en charges l'affichage des archives sous forme de calendrier * * @param null * @return null * @author Stephane F **/ function plxCalendar() { global $plxMotor; if($plxMotor->get AND preg_match('/^archives\/?([0-9]{8}|[0-9]{6}|[0-9]{4})?/',$plxMotor->get,$capture)) { $plxMotor->mode = 'categorie'; # Mode categories ( nécessaire pour la pagination) $plxMotor->plxGlob_arts = new plxGlob(PLX_ROOT.$plxMotor->aConf['racine_articles']); if ($aFiles = $plxMotor->plxGlob_arts->query('/[0-9]{4}.([0-9]{3}|home).'.$capture[1].'(.*).xml$/','archives',$plxMotor->tri,$plxMotor->bypage*($plxMotor->page-1),$plxMotor->bypage,'before')) { $array = null; foreach($aFiles as $k => $v) { $array[] = $plxMotor->parseArticle(PLX_ROOT.$plxMotor->aConf['racine_articles'].$v); } $plxMotor->plxRecord_arts = new plxRecord($array); } } } /** * Méthode qui affiche un calendrier mettant en evidence les dates de parution d'articles * * @return stdout * @author Stephane F **/ function Calendar() { global $plxMotor; preg_match('/^archives\/?([0-9]{4})([0-9]{2})([0-9]{2})?/', $plxMotor->get,$capture); $y = isset($capture[1]) ? $capture[1] : date('Y'); $m = isset($capture[2]) ? $capture[2] : date('m'); $d = isset($capture[3]) ? $capture[3] : date('d'); # on récupere la liste des jours où des articles ont été publiés $aDays = array(); $plxGlob_archives = new plxGlob(PLX_ROOT.$plxMotor->aConf['racine_articles']); if ($aFiles = $plxGlob_archives->query('/^[0-9]{4}.([0-9]{3}|home).'.$y.$m.'(.*).xml$/')) $aDays = array_map(create_function('$f', 'preg_match(\'/^[0-9]{4}.([0-9]{3}|home).[0-9]{6}([0-9]{2})(.*).xml$/\', $f,$capture); return $capture[2];'), $aFiles); $date_string = mktime(0, 0, 0, $m, 1, $y ); $day_start = date( 'w', $date_string ); // 1er jour de la semaine if ( strftime( '%w', mktime( 0, 0, 0, 1, 1, 2007 ) ) != 0 ) { $day_start = ( $day_start + 6 ) % 7; } # mois/annee - suivant/precent if ( $m < 12 ) { $next_month = $m + 1; $next_year = $y; } else { $next_year = $y + 1; $next_month = 1; } if ( $m > 1 ) { $previous_month = $m - 1; $previous_year = $y; } else { $previous_year = $y - 1; $previous_month = 12; } $str = ' <table border="0" cellpadding="0" cellspacing="0" align="center" class="calendar"> <tr> <td align="center">'; if ( ( ( $previous_year%100 )!=$y ) || ( $previous_month!=$m ) ) { $str .= '<a href="index.php?archives/'.$previous_year.sprintf('%02d', $previous_month).'">«</a>'; } $str .= '</td> <td align="center" colspan="5"> <strong> <a href="index.php?archives/'.$y.$m.'">'.ucwords(plxDate::getCalendar('month', $m)).'</a> <a href="index.php?archives/'.$y.'">'.$y.'</a> </strong></td> <td align="center">'; if ( ( ( $next_year%100 )!=$y ) || ( $next_month!=$m ) ) { $str .= '<a href="index.php?archives/'.$next_year.sprintf('%02d', $next_month).'">»</a>'; } $str .= '</td> </tr> <tr>'; for ( $i=0; $i<7; $i++ ) { if ( $day_start!=0 ) { $str .= '<td>'.substr(ucwords(plxDate::getCalendar('day', ($i+1)%7)), 0, 3).'</td>'; } else { $str .= '<td>'.substr(ucwords(plxDate::getCalendar('day', ($i+1)%8)), 0, 3).'</td>'; } } $str .= '</tr><tr>'; # colonne vide avant le 1er jour for ( $i = 0; $i<$day_start; $i++ ) { $str .= '<td> </td>'; } $current_position = $day_start; $total_days_in_month = date( 't', $date_string); for ( $i = 1; $i<=$total_days_in_month; $i++) { $str .= '<td align="center">'; $search = array_search($i, $aDays); if ($search !== false && search !== NULL) { if (mktime( 0, 0, 0, $m, $i, $y) == mktime(0, 0, 0)) $str .= '<a class="today" href="index.php?archives/'.$y.$m.sprintf('%02d', $i).'" title="'.$i.'">'.$i.'</a>'; else $str .= '<a href="index.php?archives/'.$y.$m.sprintf('%02d', $i).'" title="'.$i.'">'.$i.'</a>'; } else { if (mktime(0, 0, 0, $m, $i, $y) == mktime(0, 0, 0)) $str .= '<span class="today">'.$i.'</span>'; else $str .= $i; } $str .= '</td>'; $current_position++; if ( $current_position == 7 ) { $str .= '</tr><tr>'; $current_position = 0; } } $end_day = 7-$current_position; //Dernieres colonnes for ( $i = 0; $i<$end_day; $i++ ) { $str .= '<td></td>'; } $str .= "</tr> </table>\n"; echo $str; } } # création d'un instance de l'objet plxCalendar $plxCalendar = new plxCalendar(); ?>4. Dans le fichier header.php de ton thème en dessous de<?php if(!defined('PLX_ROOT')) exit; ?>ajoute la ligne suivante:5. Dans le fichier sidebar.php de ton thème ajoute le code suivant, là où tu souhaites voir afficher le calendrier
6. dans le feuille de style (fichier style.css), ajoute à la fin du fichier
.today{ color:red }C'est toutStéphane
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Merci pour ta remarque antistress
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
nb: tous les membres inscrits sur le forum, ont la possibilité d'écrire sur le wiki
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
J'ai installé le calendar, mais serait-il possible de le lier à une page de type évènement ou tous les articles se positionnent tel un résultat de moteur de recherche pour afficher, justement, des évènements ?
Je viens de le tester, ça fonctionne.
Mais (car il a un mais) ça affiche aussi les billets avec une date de publication future...
Effectivement, il faut donc remplacer la ligne
if ($aFiles = $plxMotor->plxGlob_arts->query('/[0-9]{4}.([0-9]{3}|home).'.$capture[1].'(.*).xml$/','archives',$plxMotor->tri,$plxMotor->bypage*($plxMotor->page-1),$plxMotor->bypage)) {parif ($aFiles = $plxMotor->plxGlob_arts->query('/[0-9]{4}.([0-9]{3}|home).'.$capture[1].'(.*).xml$/','archives',$plxMotor->tri,$plxMotor->bypage*($plxMotor->page-1),$plxMotor->bypage,'before')) {Peux-tu me confirmer que c'est ok stp ?Merci
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Même après avoir changé la ligne indiquée le calendrier propose toujours les mois futurs...
Je crois pas que c'est ok =D
Merci
Alors alors, j'utilise PluXML depuis quelques semaines, version 5.0.2, et malheur le calendrier proposé plus haut ne fonctionne pas... J'ai donc pris mon courage à deux mains pour tenter d'y remédier moi-même. Résultat, c'est plutôt crade comparé à la qualité du reste du code, mais ça tourne, c'est l'essentiel. C'est sûrement à améliorer puisqu'avec ma version le constructeur ne sert plus à rien... Bref, voilà ce que ça donne :
<?php /** * Classe plxCalendar * * @version 1.0 * @package PLX * @author Stephane F **/ class plxCalendar { /** * Méthode qui affiche un calendrier mettant en evidence les dates de parution d'articles * * @return stdout * @author Stephane F **/ function Calendar() { global $plxMotor; preg_match('/^archives\/?([0-9]{4})([0-9]{3})([0-9]{3})?/', $plxMotor->get,$capture); $y = isset($capture[1]) ? $capture[1] : date('Y'); $m = isset($capture[2]) ? $capture[2] : date('m'); $d = isset($capture[3]) ? $capture[3] : date('d'); # on récupere la liste des jours où des articles ont été publiés $aDays = array(); $plxGlob_archives = new plxGlob(PLX_ROOT.$plxMotor->aConf['racine_articles']); $aFiles = $plxGlob_archives->aFiles; foreach($aFiles as $aFile) { preg_match('/[0-9]{4}.[0-9]{3}.[0-9]{3}.[0-9]{12}.(.*?).xml/', $aFile, $cap); $caps[] = $cap[0]; } // pour chaque articles on parse : $aDays[date] => array(id, titre) foreach($caps as $aDay) { $Day = explode('.',$aDay); $day = substr($Day[3],0,8); $aDays[$day] = array('id'=>substr($Day[0],0,4),'titre'=>$Day[4]); } $date_string = mktime(0, 0, 0, $m, 1, $y ); $day_start = date( 'w', $date_string ); // 1er jour de la semaine if ( strftime( '%w', mktime( 0, 0, 0, 1, 1, 2007 ) ) != 0 ) { $day_start = ( $day_start + 6 ) % 7; } # mois/annee - suivant/precent if ( $m < 12 ) { $next_month = $m + 1; $next_year = $y; } else { $next_year = $y + 1; $next_month = 1; } if ( $m > 1 ) { $previous_month = $m - 1; $previous_year = $y; } else { $previous_year = $y - 1; $previous_month = 12; } $str = ' <table border="0" cellpadding="0" cellspacing="0" align="center" class="calendar"> <tr> <td align="center">'; if ( ( ( $previous_year%100 )!=$y ) || ( $previous_month!=$m ) ) { $str .= '<a href="index.php?archives/'.$previous_year.sprintf('%02d', $previous_month).'">«</a>'; } $str .= '</td> <td align="center" colspan="5"> <strong> <a href="index.php?archives/'.$y.$m.'">'.ucwords(plxDate::getCalendar('month', $m)).'</a> <a href="index.php?archives/'.$y.'">'.$y.'</a> </strong></td> <td align="center">'; if ( ( ( $next_year%100 )!=$y ) || ( $next_month!=$m ) ) { $str .= '<a href="index.php?archives/'.$next_year.sprintf('%02d', $next_month).'">»</a>'; } $str .= '</td> </tr> <tr>'; for ( $i=0; $i<7; $i++ ) { if ( $day_start!=0 ) { $str .= '<td>'.substr(ucwords(plxDate::getCalendar('day', ($i+1)%7)), 0, 3).'</td>'; } else { $str .= '<td>'.substr(ucwords(plxDate::getCalendar('day', ($i+1)%8)), 0, 3).'</td>'; } } $str .= '</tr><tr>'; # colonne vide avant le 1er jour for ( $i = 0; $i<$day_start; $i++ ) { $str .= '<td> </td>'."\n"; } $current_position = $day_start; $total_days_in_month = date( 't', $date_string); for ( $i = 1; $i<=$total_days_in_month; $i++) { $str .= '<td align="center">'; $sday = $y.$m.$i; // si un article existe pour ce jour if($aDays[$sday]) { // et que c'est aujourd'hui if(mktime(0, 0, 0, $m, $i, $y) == mktime(0, 0, 0)) { $str .= '<span class="today"><b><a href="index.php?article'.$aDays[$sday]['id'].'/'.$aDays[$sday]['titre'].'" title="'.$i.'">'.$i.'</a></b></span>'; } // ou pas else { $str .= '<a href="index.php?article'.$aDays[$sday]['id'].'/'.$aDays[$sday]['titre'].'" title="'.$i.'">'.$i.'</a>'; } } else { if (mktime(0, 0, 0, $m, $i, $y) == mktime(0, 0, 0)) $str .= '<span class="today"><b>'.$i.'</b></span>'; else $str .= $i; } $str .= '</td>'."\n"; $current_position++; if ( $current_position == 7 ) { $str .= '</tr><tr>'; $current_position = 0; } } $end_day = 7-$current_position; //Dernieres colonnes for ( $i = 0; $i<$end_day; $i++ ) { $str .= '<td></td>'; } $str .= "</tr> </table>\n"; echo $str; } } # création d'un instance de l'objet plxCalendar $plxCalendar = new plxCalendar(); ?>Je n'ai pas touché au @author, faîtes ce que vous voulez de ceci, c'est fait pour servirBonne journée, joyeuses fêtes, et bonne année un peu en avance
j ai vérifié sous pluxml5.1beta1 mais
j obtiens l erreur suivante :
Fatal error: Call to private plxGlob::__construct() from context 'plxCalendar' in www...\calendar\class.plx.calendar.php on line 29
et à la ligne 29 j ai ça :
$plxGlob_archives = new plxGlob(PLX_ROOT.$plxMotor->aConf);
quelqu un a une idée ?
ps : j utilise le code ci dessus
esasye de remplacer la ligne en question par:
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
si ça intéresse quelqu'un voici le code pour la 5.1beta1 (potentiellement à améliorer)
class plxCalendar { function Calendar() { global $plxMotor; preg_match('/^archives\/?([0-9]{4})[\/]?([0-9]{2})[\/]?([0-9]{2})?/', $plxMotor->get,$capture); $y = isset($capture[1]) ? $capture[1] : date('Y'); $m = isset($capture[2]) ? $capture[2] : date('m'); $d = isset($capture[3]) ? $capture[3] : date('d'); # on récupere la liste des jours où des articles ont été publiés $aDays = array(); $plxGlob_archives = plxGlob::getInstance(PLX_ROOT.$plxMotor->aConf['racine_articles']); $aFiles = $plxGlob_archives->aFiles; foreach($aFiles as $aFile) { preg_match('/[0-9]{4}.[home|0-9,]*.[0-9]{3}.[0-9]{12}.(.*?).xml/', $aFile, $cap); if ( isset($cap[0]) ) { $caps[] = $cap[0]; } } // pour chaque articles on parse : $aDays[date] => array(id, titre) foreach($caps as $aDay) { $Day = explode('.',$aDay); $day = substr($Day[3],0,8); $aDays[$day][] = array('id'=>$Day[0],'titre'=>$Day[4]); } $date_string = mktime(0, 0, 0, $m, 1, $y ); $day_start = date( 'w', $date_string ); // 1er jour de la semaine if ( strftime( '%w', mktime( 0, 0, 0, 1, 1, 2007 ) ) != 0 ) { $day_start = ( $day_start + 6 ) % 7; } # mois/annee - suivant/precent if ( $m < 12 ) { $next_month = $m + 1; $next_year = $y; } else { $next_year = $y + 1; $next_month = 1; } if ( $m > 1 ) { $previous_month = $m - 1; $previous_year = $y; } else { $previous_year = $y - 1; $previous_month = 12; } $str = ' <table border="0" cellpadding="0" cellspacing="0" align="center" class="calendar"> <tr> <td align="center">'; if ( ( ( $previous_year%100 )!=$y ) || ( $previous_month!=$m ) ) { $str .= '<a href="index.php?archives/'.$previous_year.'/'.sprintf('%02d', $previous_month).'">«</a>'; } $str .= '</td> <td align="center" colspan="5"> <strong> <a href="index.php?archives/'.$y.'/'.$m.'">'.ucwords(plxDate::getCalendar('month', $m)).'</a> <a href="index.php?archives/'.$y.'">'.$y.'</a> </strong></td> <td align="center">'; if ( ( ( $next_year%100 )!=$y ) || ( $next_month!=$m ) ) { $str .= '<a href="index.php?archives/'.$next_year.'/'.sprintf('%02d', $next_month).'">»</a>'; } $str .= '</td> </tr> <tr>'; for ( $i=0; $i<7; $i++ ) { if ( $day_start!=0 ) { $str .= '<td>'.substr(ucwords(plxDate::getCalendar('day', ($i+1)%7)), 0, 3).'</td>'; } else { $str .= '<td>'.substr(ucwords(plxDate::getCalendar('day', ($i+1)%8)), 0, 3).'</td>'; } } $str .= '</tr><tr>'; # colonne vide avant le 1er jour for ( $i = 0; $i<$day_start; $i++ ) { $str .= '<td> </td>'."\n"; } $current_position = $day_start; $total_days_in_month = date( 't', $date_string); for ( $i = 1; $i<=$total_days_in_month; $i++) { $str .= '<td align="center">'; $sday = $y.$m.sprintf('%02d', $i); // si un article existe pour ce jour if( isset($aDays[$sday][0]) AND (mktime(0, 0, 0, $m, $i, $y) <= mktime(0, 0, 0)) ) { # pour n'afficher que les articles futur changer la condition de mktime en >= // et que c'est aujourd'hui if(mktime(0, 0, 0, $m, $i, $y) == mktime(0, 0, 0)) { // si plusieurs articles ce jour là -> renvoi vers l'archive du jour if ( isset($aDays[$sday][1]) ) # /!\ l'archive du jour n'existe pas sous pluxml 5.1beta1 $str .= '<span class="today"><b><a href="index.php?archives/'.$y.'/'.$m.'/'.sprintf('%02d', $i).'" title="'.$i.'">'.$i.'</a></b></span>'; // sinon renvoi directement vers l'article else $str .= '<span class="today"><b><a href="index.php?article'.$aDays[$sday][0]['id'].'/'.$aDays[$sday][0]['titre'].'" title="'.ucfirst(str_replace("-"," ",$aDays[$sday][0]['titre'])).'">'.$i.'</a></b></span>'; # variante 1 : renvoi vers l'article #$str .= '<span class="today"><b><a href="index.php?article'.$aDays[$sday][0]['id'].'/'.$aDays[$sday][0]['titre'].'" title="'.ucfirst(str_replace("-"," ",$aDays[$sday][0]['titre'])).'">'.$i.'</a></b></span>'; # variante 2 : renvoi vers l'archive du mois #$str .= '<span class="today"><b><a href="index.php?archives/'.$y.'/'.$m.'" title="'.$i.'">'.$i.'</a></b></span>'; # autre variante : renvoi vers l'archive du jour => non pris en charge par plxMotor dans la version 5.1beta1 #$str .= '<span class="today"><b><a href="index.php?archives/'.$y.'/'.$m.'/'.sprintf('%02d', $i).'" title="'.$i.'">'.$i.'</a></b></span>'; } // ou pas else { // si plusieurs articles ce jour là -> renvoi vers l'archive du jour if ( isset($aDays[$sday][1]) ) # /!\ l'archive du jour n'existe pas sous pluxml 5.1beta1 $str .= '<a href="index.php?archives/'.$y.'/'.$m.'/'.sprintf('%02d', $i).'" title="'.$i.'">'.$i.'</a>'; // sinon renvoi directement vers l'article else $str .= '<a href="index.php?article'.$aDays[$sday][0]['id'].'/'.$aDays[$sday][0]['titre'].'" title="'.ucfirst(str_replace("-"," ",$aDays[$sday][0]['titre'])).'">'.$i.'</a>'; # variante 1 : renvoi vers l'article #$str .= '<a href="index.php?article'.$aDays[$sday][0]['id'].'/'.$aDays[$sday][0]['titre'].'" title="'.ucfirst(str_replace("-"," ",$aDays[$sday][0]['titre'])).'">'.$i.'</a>'; # variante 2 : renvoi vers l'archive du mois #$str .= '<a href="index.php?archives/'.$y.'/'.$m.'" title="'.$i.'">'.$i.'</a>'; # autre variante : renvoi vers l'archive du jour => non pris en charge par plxMotor dans la version 5.1beta1 #$str .= '<a href="index.php?archives/'.$y.'/'.$m.'/'.sprintf('%02d', $i).'" title="'.$i.'">'.$i.'</a>'; } } else { if (mktime(0, 0, 0, $m, $i, $y) == mktime(0, 0, 0)) $str .= '<span class="today"><b>'.$i.'</b></span>'; else $str .= $i; } $str .= '</td>'."\n"; $current_position++; if ( $current_position == 7 ) { $str .= '</tr><tr>'; $current_position = 0; } } $end_day = 7-$current_position; //Dernieres colonnes for ( $i = 0; $i<$end_day; $i++ ) { $str .= '<td></td>'; } $str .= "</tr> </table>\n"; echo $str; } } # création d'un instance de l'objet plxCalendar $plxCalendar = new plxCalendar();et surtout merci pour Pluxml que je découvre enfin...
j'ai un site de jeux concours et j'aimerai utiliser ce fameux calendrier pour ajouter chaque concours par date.
Le souci c'est que sous la dernière version, on arrive pas a afficher tout les articles d'une même date.
Soit un seul article s'affiche, soit toute l'archive du moi s'affiche...
Quelqu'un aurait il une solution ? merci en tout cas a vous tous
pour arriver à tes fin il faut modifier le core de pluxml (attention aux futur mise à jour)
dans core\lib\class.plx.motor.php il faut modifier la fonction prechauffage()
cherche :
elseif($this->get AND preg_match('/^archives\/([0-9]{4})[\/]?([0-9]{2})?/',$this->get,$capture)) { $this->mode = 'archives'; $this->template = 'archives.php'; $this->cible = $capture[1]; $this->bypage = $this->aConf['bypage_archives']; if(empty($capture[2])) $this->cible .= '[0-9]{2}'; else $this->cible .= $capture[2]; $this->motif = '/^[0-9]{4}.[0-9,]*.[0-9]{3}.'.$this->cible.'[0-9]{6}.[a-z0-9-]+.xml$/'; }et remplace par :elseif($this->get AND preg_match('/^archives\/([0-9]{4})[\/]?([0-9]{2})?[\/]?([0-9]{2})?/',$this->get,$capture)) { $this->mode = 'archives'; $this->template = 'archives.php'; $this->cible = $capture[1]; $this->bypage = $this->aConf['bypage_archives']; if(empty($capture[2])) $this->cible .= '[0-9]{2}'; else $this->cible .= $capture[2]; if(empty($capture[3])) $this->cible .= '[0-9]{2}'; else $this->cible .= $capture[3]; $this->motif = '/^[0-9]{4}.[0-9,]*.[0-9]{3}.'.$this->cible.'[0-9]{4}.[a-z0-9-]+.xml$/'; }peut etre que stéphane modifira le core de pluxml dans une prochaine version pour inclure l'archive du jourps: j ai aussi modifié la fonction getCalendar() dans class.plx.date.php
merci pour ce super coup de main j'ai enfin un site qui fonctionne à 200 %
http://jeux.concours-gagnant.net
et super script en tout cas pour un cms sans base de donnée!