PluXml 5.0: Affichage des archives façon 4.3

Avec l'arrivée de PluXml 5.0, nous avions eu le droit à un affichage des archives natif, dans la sidebar. Malheureusement, je trouve qu'on ne distingue plus très bien les années des mois. De plus, je n'aime pas l'idée de réduire une année de plublications en une seule ligne, j'ai l'impression de ne pas avoir travaillé.
Bref, je préfèrais l'affichage que l'on avait sous PluXml 4.3, à l'aide d'un petit hack.

Aujourd'hui je vous propose une petite modification inspiré du hack, qui va nous permettre re-obtenir l'agencement des archives en sidebar, à la façon de PluXml 4.3.

La procédure

Dans la racine de PluXml, éditez core/lib/class.plx/show. nous aurons une fonction à insérer avant les derniers symboles:
  }
?>
Insérons la fonction suivante:
        /**
         * Méthode qui affiche la liste des archives comme sur la version 4.3 de PluXml
         *
         * @param       format  format du texte pour l'affichage (variable : #archives_id, #archives_status, #archives_nbart, #archives_url, #archives_name)
         * @return      stdout
         * @scope       global
         * @author      Stephane F
         **/
    public function archListOld($format='<dd id="#archives_id"><a class="#archives_status" href="#archives_url" title="#archives_name">#archives_name (#archives_nbart)</a></dd>'){
        $array = array();
        if($files = $this->plxMotor->plxGlob_arts->query('/^[0-9]{4}.[home|0-9,]*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/','art','rsort',0,false,'before')) {
                foreach($files as $id => $filename){
                        if(preg_match('/([0-9]{4}).([home|0-9,]*).[0-9]{3}.([0-9]{4})([0-9]{2})([0-9]{6}).([a-z0-9-]+).xml$/',$filename,$capture)){
                                if(!isset($array[$capture[3]][$capture[4]])) $array[$capture[3]][$capture[4]]=1;
                                else $array[$capture[3]][$capture[4]]++;
                        }
                }
                foreach($array as $year => $data){
                                echo '<dl><dt><a href="?archives/'.$year.'">'.$year.'</a></dt>';
                                foreach($array[$year] as $month => $nbarts){
                                        $name = str_replace('#archives_id','archives-'.$year.$month,$format);
                                        $name = str_replace('#archives_name',plxDate::getCalendar('month', $month),$name);
                                        $name = str_replace('#archives_url', $this->plxMotor->urlRewrite('?archives/'.$year.'/'.$month), $name);
                                        $name = str_replace('#archives_nbart',$nbarts,$name);
                                        $name = str_replace('#archives_status',(($this->plxMotor->mode=="archives" AND $this->plxMotor->cible==$year.$month)?'active':'noactive'), $name);
                                        echo $name;
                                }
                                echo '</dl>';
                }
        }

   }
Puis dans notre thème/sidebar.php, remplacons l'affichage des archives par:
        <h2>Archives</h2&gt
        <?php $plxShow->archListOld() ?&gt

Enfin, si vous voulez mettre en valeur les années de la liste (choix très subjectif), vous pouvez ajouter ceci au style.css:
#sidebar dt {
        font-weight: bold;
        font-size: 12px;
        }


Le mot de la fin

Si tout à bien fonctionné, nous devrions avoir des archives plus bavardes. Un billet à été créé sur le forum de PluXml pour l'occasion. Je répercuterais les modifications pertinentes du forum vers ce billet.

Merci à Stéphane qui corrigé les erreurs de la fonction.

Edit (09/10/2010): Suppression balises h3, ajout mise en forme des balises dt dans style.css.
Vus : 2273
Publié par PPmarcel : 21