[Astuce]Afficher la liste des articles de la catégorie active
Hello,
Dans la lignée du Menu listant les articles classés par catégories, voici une autre astuce qui consiste à afficher simplement la liste des articles de la catégorie active.
On la place souvent à gauche en tant que sous-menu ou en pied de page pour proposer à l'internaute d'aller visiter d'autres pages intéressantes.
Vous pouvez en voir un exemple sur http://www.samare.net, juste dessous la zone article suivant/précédent.
Pour se faire, copiez ( tout simplement ) ce code et placez-le à l'endroit stratégique dans votre template article.php.
Le chiffre 20 indique le nombre de lien que vous souhaitez afficher.
Cordialement,
_____
D.San
Dans la lignée du Menu listant les articles classés par catégories, voici une autre astuce qui consiste à afficher simplement la liste des articles de la catégorie active.
On la place souvent à gauche en tant que sous-menu ou en pied de page pour proposer à l'internaute d'aller visiter d'autres pages intéressantes.
Vous pouvez en voir un exemple sur http://www.samare.net, juste dessous la zone article suivant/précédent.
Pour se faire, copiez ( tout simplement ) ce code et placez-le à l'endroit stratégique dans votre template article.php.
<div id="autres_articles">
<h4>Articles concernant la catégorie <?php $plxShow->artCat(); ?></h4>
<ul>
<?php
$idCat = sprintf("%03d", $plxShow->artCatId());
$plxShow->lastArtList('<li class="#art_status"><a href="#art_url" title="#art_title">#art_title</a></li>','20', $idCat);
?>
</ul>
</div>
Le chiffre 20 indique le nombre de lien que vous souhaitez afficher.
Cordialement,
_____
D.San
0
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Un jour je m'amuserai avec çà, et si j'écris un article là dessus je te le dirai sur ce fil.
Cette astuce utilise le hook standard "plxShowLastCatList" de la méthode "catList()" de la classe plxShow.
Plutot qu'un long discours, voici le code, à placer dans un plugin :
<?php /** * Méthode qui affiche la liste des catégories actives, avec la liste des articles associés. * Si la variable $extra est renseignée, un lien vers la * page d'accueil (nommé $extra) sera mis en place en première * position. * * @param $extra string nom du lien vers la page d'accueil * @param $format string format du texte pour chaque catégorie (variable : #cat_id, #cat_status, #cat_url, #cat_name, #art_nb) * ou * $format array( * $format[0] string format du texte pour chaque catégorie (variable : #cat_id, #cat_status, #cat_url, #cat_name, #art_nb) * $format[1] integer nombre d'articles maximum à afficher dans les sous-menu * ) * @param include string liste des catégories à afficher séparées par le caractère | (exemple: 001|003) * @param exclude string liste des catégories à ne pas afficher séparées par le caractère | (exemple: 002|003) * @return stdout * @scope global * @author Anthony GUÉRIN, Florent MONTHEL, Stephane F, Cyril MAGUIRE */ public function plxShowLastCatList(){ $string =<<<END if (is_array(\$format)) { \$f = \$format[0]; \$nbSousMenu = intval(\$format[1]); \$format = \$f; unset(\$f); } else { \$nbSousMenu = 0; } # Si on a la variable extra, on affiche un lien vers la page d'accueil (avec \$extra comme nom) if(\$extra != '') { \$name = str_replace('#cat_id','cat-home',\$format); \$name = str_replace('#cat_url',\$this->plxMotor->urlRewrite(),\$name); \$name = str_replace('#cat_name',plxUtils::strCheck(\$extra),\$name); \$name = str_replace('#cat_status',(\$this->catId()=='home'?'active':'noactive'), \$name); \$name = str_replace('#art_nb','',\$name); echo \$name."\n\t\t\t"; } if(\$this->plxMotor->aCats) { foreach(\$this->plxMotor->aCats as \$k=>\$v) { \$in = (empty(\$include) OR preg_match('/('.\$include.')/', \$k)); \$ex = (!empty(\$exclude) AND preg_match('/('.\$exclude.')/', \$k)); if(\$in AND !\$ex) { if((\$v['articles']>0 OR \$this->plxMotor->aConf['display_empty_cat']) AND (\$v['menu']=='oui') AND \$v['active']) { # On a des articles \$k = intval(\$k); if (\$nbSousMenu != 0) : ob_start(); \$this->lastArtList('<li class="#art_status"><a href="#art_url">#art_title</a></li>',\$nbSousMenu,\$k); \$sousmenu = ob_get_clean(); if (strlen(\$sousmenu) != 0): \$sousmenu = ' <ul> '.str_replace('</li><li', '</li>'."\n\t\t\t\t\t".'<li', \$sousmenu).' </ul> </li>'; endif; else : \$sousmenu = '</li>'; endif; # On modifie nos motifs \$name = str_replace('#cat_id','menu_cat-'.\$k,\$format); \$name = str_replace('#cat_url',\$this->plxMotor->urlRewrite('?categorie'.\$k.'/'.\$v['url']),\$name); \$name = str_replace('#cat_name',plxUtils::strCheck(\$v['name']),\$name); if (\$this->mode() == 'article' && in_array(\$k,explode(',',\$this->plxMotor->plxRecord_arts->f('categorie')))) { \$name = str_replace('#cat_status','active', \$name); }else { \$name = str_replace('#cat_status',(\$this->catId()==\$k?'active':'noactive'), \$name); } \$name = str_replace('#art_nb',\$v['articles'],\$name); \$name = str_replace('</li>',\$sousmenu,\$name); echo \$name; } } } } return true; END; echo '<?php '.$string.'?>'; } ?>On utilise la méthode ainsi :
$plxShow->catList($plxShow->getLang('HOME'),array('<li class="#cat_status page_item"><a href="#cat_url" title="#cat_name">#cat_name</a></li>'."\n\t\t",15),'001|002|003','004|005|006');Ce qui affichera 15 articles par catégorie, des catégories 1, 2 et 3. Les catégories 4, 5 et 6 ne seront pas affichées.
Pour que cela fonctionne sur mon site ( pluxml 5.3), il a fallu que je remplace
[== PHP ==] $idCat = sprintf("%03d", $plxShow->artCatId());parCordialement
Je viens de rajouter cette fonctionnalité à mon plugin myPager qui en fait un peu plus.
Pour la catégorie, le mot-clé ou l'archive active, quand on lit un article, un navigateur s'affiche en bas de la fenêtre qui permet de sélectionner dans une liste déroulante un article dans la sélection.
Le plugin est déjà prêt pour un éventuel mode authors (auteurs)
Voir la démo chez Free.
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
J'affiche bien les articles et le nombre d'articles de la catégorie active. Et ce sans problème.
Pour les catégories ayant un grand nombre d'articles (variable: nb_ArtCat), j'ai limité l'affichage à un nombre déterminé d'articles (nb_item). Cela fonctionne sans problème.
Je voulais ajouter à la fin de cette liste un lien Afficher tous les articles ( l'idéal aurait été un lien voir les autres articles, c'est à dire tous sans ceux étant déjà affichés) si le nombre d'articles de la catégorie est supérieur au nombre d'articles affichés.
Cela fonctionne à peu près bien. Mais petit bug.
Pour le nombre d'articles affichés j'ai choisi 2 , chiffre faible mais pour faciliter le test.
Si le nombre d'articles de la catégorie est inférieur ou égal à 2: pas de problème.
Mais si il est supérieur à 2 ( dans mon test il est égal à 3), alors il affiche 3 fois Voir les autres articles.
Petite précision: quand j'avais 3 catégories, il affichait 3 fois.
Maintenant que j'ai testé avec 4 catégories il affiche 4 fois
En fait ce que je viens de voir, chacun de ces liens dirige vers chacune des catégories et non pas la catégorie active.
[== PHP ==] <ul> <?php $idCat = $plxShow->CatId(); $nb_item = 2; // nombre d'articles maxi affichés dans le menu $plxShow->lastArtList('<li class="#art_status"><a href="#art_url" title="#art_title">#art_title</a></li>',$nb_item, $idCat); $nb_ArtCat = $plxShow->plxMotor->nbArticles('(?:[0-9]|home|,)*(?:'.$cat.')(?:[0-9]|home|,)*', '[0-9]{3}', '', 'before'); if($nb_item<$nb_ArtCat){ // si le nombre d'articles de la catégorie est supérieur à $nb_item, on affiche un lien "Voir tous les articles" $plxShow->catList('','<li id="menu_#cat_id"><a href="#cat_url" title="Voir tous les articles de la catégorie #cat_name">Voir tous les articles</a></li>',$id_cat); }else{} ?> </ul>une petite erreur dans le nom de la même variable
Tout fonctionne excepté le lien vers voir tous les articles
[== PHP ==] <?php $cat = $plxShow->catId(); $nb_item = 2; // nombre d'articles maxi affichés dans le menu $plxShow->lastArtList('<li class="#art_status"><a href="#art_url" title="#art_title">#art_title</a></li>',$nb_item, $cat); $nb_ArtCat = $plxShow->plxMotor->nbArticles('(?:[0-9]|home|,)*(?:'.$cat.')(?:[0-9]|home|,)*', '[0-9]{3}', '', 'before'); if($nb_item<$nb_ArtCat){ // si le nombre d'articles de la catégorie est supérieur à $nb_item, on affiche un lien "Voir tous les articles" $plxShow->catList('','<li id="menu_#cat_id"><a href="#cat_url" title="Voir tous les articles de la catégorie #cat_name">Voir tous les articles</a></li>',$cat); }else{} ?>Non le bug qui est plus embétant que je viens de voir
voir l'exemple (sidebar)
c'est lorsque je clique sur un article, il perd la catégorie active et donc n'affiche plus la liste des articles de la catégorie.
En fait le lien voir tous les articles fonctionne bien dans mon menu horizontal et correspond à la fonction que je voulais.