Sous menu de catégorie

J'ai essayé de bidouiller le code qui liste tous les articles dans une page, mais comme je ne connais rien en php j'ai pas réussi.

Voici donc ce que je recherche.

Je voudrais ajouter dans la sidebar en bout de code qui génère tous les articles de la catégorie dans laquelle on s'y trouve, explication en details:

Exemple:
Dans mon site j'ai 5 catégories nommées: catégorie-1, catégorie-2, catégorie-3, catégorie-5 et catégorie-5 et 55articles repartis dans ces catégories, je voudrais donc, que quand je me trouve dans la catégorie-1, tous les articles de cette catégorie soient affichés dans un cadre et ainsi de suite.

Avec cette fonction un aurait un accès rapide a tous les articles de la catégorie, sous forme de sous menu.
Ainsi je nommerais le menu des catégories en dossiers et un sous menu affiche les articles de chaque dossier.

Je continue de bidouiller, si je trouve, je partage....

Réponses

  • GhuneGhune Member
    novembre 2010 modifié
    Je sais que ce n'est pas exactement ce que tu recherches mais il y a un "sommaire" de possible ou une fonction comme les archives qu'on peut faire facilement :
    Sur mon site, ça donne ça : http://thefrenchmoose.free.fr/index.php?static3/archives

    La page wiki :
    http://wiki.pluxml.org/index.php?page=Lister+les+articles+par+cat%C3%A9gories+dans+une+page+statique


    Edition
    Sinon, il faudra une grande marge pour faire tenir les noms de tes articles et ça ne fait pas très beau...
  • merci pour cette réponse rapide, mais cela ne correspond pas du tout a ce que je recherche, je voudrais seulement pouvoir générer les titres des articles de la catégorie ou je me trouve, il faudra donc deux fonctions, une qui détecte la catégorie ou je me trouve et une autre, qui liste les articles de cette même catégorie.

    Pour ce qui est de la marge pour faire tenir les articles, ce n'est pas un problème car il n'y a que les titres qui s'afficheront, il y aurais en moyenne une dizaine par catégorie.
    Si un codeur peu m'aiguiller au moins pour débuter......
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour Clyd

    Comme la dit Ghune, je pense que tu peux utiliser le code donné sur le wiki (version pour PluXml 5+) à cette adresse:

    http://wiki.pluxml.org/index.php?page=Lister+les+articles+par+cat%C3%A9gories+dans+une+page+statique

    Copie le code dans le fichier sidebar.php

    Tu peux supprimer la ligne (car inutile dans ton cas)
    global $plxShow;
    
    remplacer la ligne
    $catList = '';
    
    par
    $catList = $plxShow->catId();
    
    et modifier la ligne
    echo '<li>'.$art_date.': <a href="'.$plxShow->plxMotor->aConf['racine'].'?article'.$art_num.'/'.$art_url.'">'.$art_title.'</a></li>';
    
    par
    echo '<li><a href="'.$plxShow->plxMotor->aConf['racine'].'?article'.$art_num.'/'.$art_url.'">'.$art_title.'</a></li>';
    
    pour ne pas afficher la date (vu que tu ne veux que le titre)

    Je n'ai pas testé, mais ça me semble être un bon début

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • ClydClyd Member
    novembre 2010 modifié
    Merci Stéphane pour cette intervention rapide et efficace c'est exactement ce que je cherchais, cela fonctionne parfaitement avec la réécriture d'URL activé.

    J'ai aussi enlevé le lien sur la catégorie.

    Merci encore
  • Je viens poster mon retour d'expérience....

    Voile le code fonctionne, c'est une fonction très pratique pour ces qui ont beaucoup d'articles.

    En conséquence lorsque l'on clique sur un mot clef et que l'on accède a la page tags/MOT-CLE ce code génère la totalité des articles, ce qui n'est pas terrible, si quelqu'un connais la portion de code a supprimer pour que le code ne génère des liens qui si ont est sur une catégorie...

    Voici le code utilisé sans oublier que j'ai supprimé les points d'interrogation car j'utilise la réécriture d'urls.
    <?php
    
    if(!defined('PLX_ROOT')) exit;
    
    #=======PARAMÈTRES ========
    # format de la date
    $format_date = '#num_day/#num_month/#num_year(4)';
    $catList = $plxShow->catId(); 
    $artsByCategory = 0; 
    #==========================
    
    $plx_arts = array();
    $plxGlob_arts = plxGlob::getInstance(PLX_ROOT.$plxShow->plxMotor->aConf['racine_articles']);
    $aFiles = $plxGlob_arts->query('/[0-9]{4}.[home|0-9,]*'.$catList.'[0-9,]*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/','art','rsort',0,false,'before');
    $aCatList = explode('|', $catList);
    if(is_array($aFiles)) { # On a des fichiers
        while(list($k,$v) = each($aFiles)) { # On parcourt tous les fichiers
            $temp = $plxShow->plxMotor->parseArticle(PLX_ROOT.$plxShow->plxMotor->aConf['racine_articles'].$v);
    		$cats = explode(',', $temp['categorie']);
    		foreach($cats as $cat) {
    			if($catList=='' OR in_array($cat, $aCatList)) {
    				if(!isset($plx_arts[$cat]))
    					$plx_arts[$cat][] = $temp;
    				elseif(intval(sizeof($plx_arts[$cat])) < $artsByCategory OR $artsByCategory == 0)
    					$plx_arts[$cat][] = $temp;
    			}
    		}
        }
        if($plx_arts) { # On a des articles
    		
    		# tri en fonction de l'ordre d'affiche des catégories
    		uksort($plx_arts, create_function('$a, $b', 'global $plxShow; return strcmp(array_search($a, array_keys($plxShow->plxMotor->aCats)), array_search($b, array_keys($plxShow->plxMotor->aCats)));'));
    			
            # On boucle sur nos articles
    		foreach ($plx_arts as $k => $v) {
    
    			$cat_num = $k;
    		
    			# on trie en fonction de l'ordre d'affichage des articles dans la catégorie
    			if($cat_num=='home') {
    				if ($plxShow->plxMotor->aConf['tri']=='asc') 
    					usort($v, create_function('$a, $b', 'return strcmp($a["date"], $b["date"]);'));
    				else
    					usort($v, create_function('$a, $b', 'return strcmp($b["date"], $a["date"]);'));
    				echo '<h2>Accueil</h2>';
    			}
    			elseif(!isset($plxShow->plxMotor->aCats[$cat_num])) {
    				if ($plxShow->plxMotor->aConf['tri']=='asc') 
    					usort($v, create_function('$a, $b', 'return strcmp($a["date"], $b["date"]);'));
    				else
    					usort($v, create_function('$a, $b', 'return strcmp($b["date"], $a["date"]);'));
    				echo '<h2>Non classé</h2>';
    			} 
    			else {
    				if ($plxShow->plxMotor->aCats[$cat_num]['tri'] == 'asc')
    					usort($v, create_function('$a, $b', 'return strcmp($a["date"], $b["date"]);'));
    				else
    					usort($v, create_function('$a, $b', 'return strcmp($b["date"], $a["date"]);'));
    				$cat_name = plxUtils::strCheck($plxShow->plxMotor->aCats[ $cat_num ]['name']);
    				$cat_url = $plxShow->plxMotor->aCats[ $cat_num ]['url'];
    				echo '<h2>Dans ce dossier</h2>';				
    			}
    			echo "<ul>";
    			# On boucle sur les articles de la categories
    			while(list($null, $art) = each($v)) {
    				$art_num = intval($art['numero']);
    				$art_url = plxUtils::strCheck(($art['url']));
    				$art_title = plxUtils::strCheck(($art['title']));
    				$art_date = plxDate::dateIsoToHum($art['date'], $format_date);
    				echo '<li><a href="'.$plxShow->plxMotor->aConf['racine'].'article'.$art_num.'/'.$art_url.'">'.$art_title.'</a></li>'; 
    			}
    			echo "</ul>";
            }
    
        }
    }
    ?>
    
    S'il est possible de supprimer la génération des articles non classées et ces de l'accueil ce serai superbe, en résume je voudrais seulement les articles de la catégorie ou l'on se trouve.

    Merci d'une aide éventuelle.
Connectez-vous ou Inscrivez-vous pour répondre.