[Beta 4.3.x] Archives

fightsoulfightsoul Member
février 2010 modifié dans Modifications
Bonsoir à tous,
voilà j'ai vu souvent sur le forum si il y avait la possibilité d'avoir des archives (comme sur les gros système de blog) et avec la nouvelle version c'est possible puisqu'il y a un simili timestamp dans le nom du fichier, voici les modifications à effectuer pour avoir l'affichage des archives sur votre blog/site.

modification pour /core/lib/class.plx.motor.php :
- ajout d'une condition à la méthode préchauffage (au niveau de la ligne 270) :
elseif($this->get AND preg_match('/^archive([0-9]{4})\/([0-9]{2})\//',$this->get,$capture)) {
			$this->mode = 'archive';
			$this->cible = $capture[1].$capture[2];
			$this->motif = '/^[0-9]{4}.[0-9]{3}.'.$this->cible.'[0-9]{6}.[a-z0-9-]+.xml$/';
		}
- modification de la ligne 298, la remplacer par :
if($this->mode == 'home' OR $this->mode == 'categorie' OR $this->mode == 'archive') {
modification pour /core/lib/class.plx.show.php (au niveau de la ligne &46) :
- ajout d'une condition à la méthode pagetitle :
if($this->plxMotor->mode == 'archive') {
			echo $this->plxMotor->aConf['title'].' - Archive '.plxDate::getCalendar('month', substr($this->plxMotor->cible, 4, 6)).' '.substr($this->plxMotor->cible, 0, 4);
			return;
		}
- modification de la ligne 1011 de la méthode pagination :
} elseif($this->plxMotor->mode == 'categorie' OR $this->plxMotor->mode == 'archive') { # En mode categorie
- ajout de la méthode archive :
function archive($format='#archive_date'){
        $array = array();
		$files = $this->plxMotor->plxGlob_arts->query('/^[0-9]{4}.[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}).([0-9]{3}).([0-9]{6})([0-9]{6}).([a-z0-9-]+).xml$/',$filename,$capture)){
                $array[$capture[3]][] = $capture[5];
            }
        }
        krsort($array);
        foreach($array as $date => $files){
            if(preg_match('/^([0-9]{4})([0-9]{2})$/',$date,$capture)){
                $name = str_replace('#archive_nb_art',count($array[$capture[0]]),$format);
                $name = str_replace('#archive_date',plxDate::getCalendar('month', $capture[2]).' '.$capture[1],$name);
                echo "\t\t".'<li><a href="?archive'.$capture[1].'/'.$capture[2].'/">'.$name.'</a></li>'."\n";
            }
        }
    }
- affichage de l'archive dans themes/defaut/sidebar.php :
<div id="archives">
		<h2>Archives</h2>
		<ul>
			<?php $plxShow->archive(); ?>
		</ul>
	</div>
- Création de themes/defaut/archive.php (qui est exactement la même que categorie.php) :
<?php include(dirname(__FILE__).'/header.php'); # On insere le header ?>
<div id="page">
	<div id="content">
		<?php while($plxShow->plxMotor->plxRecord_arts->loop()): # On boucle sur les articles ?>
			<h2 class="title"><?php $plxShow->artTitle('link'); ?></h2>
			<p class="cat">Classé dans : <?php $plxShow->artCat(); ?> | <span><?php $plxShow->artNbCom(); ?></span></p>
			<p class="date"><?php $plxShow->artDate('<span>#num_day</span><br />#num_month | #num_year(2)'); ?></p>
			<div class="post"><?php $plxShow->artChapo(); ?></div>
		<?php endwhile; # Fin de la boucle sur les articles ?>
		<?php # On affiche la pagination ?>
		<p id="pagination"><?php $plxShow->pagination(); ?></p>
	</div>
	<?php include(dirname(__FILE__).'/sidebar.php'); # On insere la sidebar ?>
</div>
<?php include(dirname(__FILE__).'/footer.php'); # On insere le footer ?>
Voilà, comme toujours n'hésitez pas à faire des retours ou des idées d'améliorations (dans la limite du possible ^^) ;)

Edit du 24/04/2009 : Modification de la méthode archive(), vous pouvez maintenant choisir d'afficher le nombre d'articles associé à chaque mois, pour cela vous pouvez choisir #archive_date et #archive_nb_art à passer en paramètre à la méthode (exemple : $plxShow->archive('#archive_date (#archive_nb_art)'); affichera avril 2009 (5)).


Edit du 12/02/2010 : Correction de la fonction archive pour ne pas prendre en compte les articles futurs

Edit du 20/02/2010 : Modification des numéros de lignes à modifier/ajouter, de l'appel à la méthode GetCalendar, ainsi que du fichier archive.php pour rendre la modification compatible avec la version 4.3.1

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Salut fightsoul

    ça marche nickel tes modifs. Merci

    Stéphane.

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Merci fightsoul pour cette contribution,

    Il est fort probable que nous intégrions cette fonctionnalité dans une beta 5.x.
  • HamtaroHamtaro Member
    avril 2009 modifié
    Yahoooooo Marama, une très bonne nouvelle !

    Vraiment hâte de voir la prochaine version, d'ailleurs, je trouve plus votre ligne de dev. Possible d'avoir le lien ?

    TCho, Hamtaro.

    Edit : j'ai trouvé :)
    http://pluxml.org/roadmap
  • Salut,
    ravi de l'attendre marama, je pensais que cette fonctionnalité aller intéresser plus de monde mais bon... ^^
  • StéphaneStéphane Member, Former PluXml Project Manager
    Je suis sur que beaucoup en pense pas moins, mais ils sont timides. cette fonctionnalité est bien évidement toujours la bienvenue sur un blog

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Salut,
    petit post pour signaler une mise à jour, lisez l'edit du 1er post pour connaître les modifications ;)
  • Bien !
    Toujours dans l'esprit de PluXml
  • vidub2001vidub2001 Member
    août 2009 modifié
    Bonjour,

    Serait-il possible d'avoir les mois de l'année en cours et puis en suivant seulement les années ?

    Par exemple :

    * août 2009
    * juillet 2009
    * juin 2009
    * mai 2009
    * 2008
    * 2007
    * 2006

    Merci d'avance pour l'info pour me mettre sur la piste.

    Cordialement
    Fabrice
  • Bonjour,
    @vidub2001, ce que tu demandes n'est pas possible, il faudrait changer la méthode d'affichage des archives ainsi que celle de préchauffage. Beaucoup de boulot que pas grand chose finalement :/
  • vidub2001vidub2001 Member
    septembre 2009 modifié
    Bonjour fightsoul,

    Merci pour ta réponse, le soucis est que le nombre de ligne des archives peut être conséquent sur un blog qui existe depuis pas mal de temps et cela casse la mise en page

    Par exemple : un blog qui à 3-4 ans, minimum un article par mois, les lignes d'archives vont représenter entre 36 et 48 lignes dans le bloc archives

    C'est un problème, non ?

    Cordialement
    Fabrice
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour

    Je remonte ce sujet pour corriger un petit bug dans la fonction archive à copier dans le fichier class.plx.show.php
    function archive($format='#archive_date'){
            $array = array();
    		$files = $this->plxMotor->plxGlob_arts->query('/^[0-9]{4}.[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}).([0-9]{3}).([0-9]{6})([0-9]{6}).([a-z0-9-]+).xml$/',$filename,$capture)){
                    $array[$capture[3]][] = $capture[5];
                }
            }
            krsort($array);
    		echo "<pre>";
    		print_r($array);
    		echo "</pre>";
            foreach($array as $date => $files){
                if(preg_match('/^([0-9]{4})([0-9]{2})$/',$date,$capture)){
                    $name = str_replace('#archive_nb_art',count($array[$capture[0]]),$format);
                    $name = str_replace('#archive_date',plxDate::getCalendar('month', $capture[2]).' '.$capture[1],$name);
                    echo "\t\t".'<li><a href="?archive'.$capture[1].'/'.$capture[2].'/">'.$name.'</a></li>'."\n";
                }
            }
        }
    
    Avec cette correction, les articles futurs n'apparaitront pas dans la liste des archives

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Bonjour,
    je remonte le topic pour signaler quelques modifications du code pour le rendre compatible avec la version 4.3.1, merci à un modérateur/administrateur de modifier le nom du topic en [4.3.x] Archives :)
  • StéphaneStéphane Member, Former PluXml Project Manager
    c'est fait

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

Connectez-vous ou Inscrivez-vous pour répondre.