[Résolu] trier les catégories par ordre alphabétique

Calou_63Calou_63 Member
juillet 2015 modifié dans Entraide
Bonjour,

Si je ne m'abuse, l'affichage des catégories sur un site se fait selon l'ordre qui leur a été donné dans l'espace administration.
Par exemple, si la catégorie nommée "Zoulou" a le numéro d'ordre "1", elle apparaîtra avant la catégorie nommée "Alpha" qui a le numéro d'ordre "2".
Cela implique de modifier l'ordre des catégories si l'on veut les voir apparaître par ordre alphabétique.
Existe t-il une astuce pour que les catégories apparaissent automatiquement par ordre alphabétique en cas de nouvelle création ?

Merci par avance pour vos réponses

Réponses

  • Bonjour Jormun,

    Merci beaucoup pour ta réponse.
    J'ai tout de suite testé la 2ème solution qui a résolu mon problème.
    Bon week-end
  • nicomaxnicomax Member
    octobre 2015 modifié
    Salutatous,

    Je tourne sur la version 5.1.7 de PluXml.

    Je relance ce sujet car je souhaite également que dans la partie Administration >> page de Création d'un article,
    les catégories qui se trouvent dans la zone de droite soient automatiquement classées alphabétiquement,
    sans être obligé de modifier leur "Ordre" dans la page de gestion des "Catégorie"... car j'en ai beaucoup !

    Quel fichier et ligne de code dois-je modifier ?

    La réponse a à priori déjà été donnée sur ce post mais elle a disparu ! :(

    Merci par avance de vos lumières...
    Bien à tous
    Nico
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    octobre 2015 modifié
    Salut à toi,

    dans core/admin/index.php, recherche la ligne "if($plxAdmin->aCats) {" et modifie comme ci-dessous avec ksort :
    [== PHP ==]
    if($plxAdmin->aCats) {
            ksort($plxAdmin->aCats);
    	foreach($plxAdmin->aCats as $k=>$v) {
    		$aCat[$k] = plxUtils::strCheck($v['name']);
    		$aFilterCat[$k] = plxUtils::strCheck($v['name']);
    	}
    	$aAllCat[L_CATEGORIES_TABLE] = $aCat;
    }
    
    Cela est pour Pluxml 5.4. Il faut que j'aille voir si j'ai encore une version 5.1.7 derrière mes fagots :lol:
    Je n'ai pas assez de catégories pour vérifier mais cela devrait le faire.
    C'est combien beaucoup de catégories ?

    Rappel linguistique : Il n'y a pas d'accent en latin, et donc on écrit "a priori" sans accent.

    A+
  • J'ai environ une cinquantaine de catégories et je pense qu'il va y en avoir d'autres...
    Merci pour le cours de latin ;)
    Nico
  • Re-bonjour Bazooka,

    J'ai tester sur le fichier que tu m'indiques, mais rien ne bouge au niveau de mes catégories :/
    J'ai donc mis en commentaire le bout de code en question et les catégories s'affichent toujours !

    Est-ce-qu'on cible bien le bon fichier ?

    Pour plus de précision voici une copie d'écran des catégories dont je parle dans la zone d'admin :
    copie_ecran.jpg

    Merci encore pour ton aide,
    Nico
  • En fait je pense que ça se trouve dans le fichier suivant : core / admin / article.php

    au niveau de cette partie de code :
    [== PHP ==]
    <p><label><?php echo L_ARTICLE_CATEGORIES ?>&nbsp;:</label></p>
    				<?php
    					$selected = (is_array($catId) AND in_array('000', $catId)) ? ' checked="checked"' : '';
    					echo '<input readonly="readonly" disabled="disabled" type="checkbox" id="cat_unclassified" name="catId[]"'.$selected.' value="000" /><label for="cat_unclassified">&nbsp;'. L_UNCLASSIFIED .'</label><br />';
    					$selected = (is_array($catId) AND in_array('home', $catId)) ? ' checked="checked"' : '';
    					echo '<input type="checkbox" id="cat_home" name="catId[]"'.$selected.' value="home" /><label for="cat_home">&nbsp;'. L_CATEGORY_HOME_PAGE .'</label><br />';
    					foreach($plxAdmin->aCats as $cat_id => $cat_name) {
    						$selected = (is_array($catId) AND in_array($cat_id, $catId)) ? ' checked="checked"' : '';
    						echo '<input type="checkbox" id="cat_'.$cat_id.'" name="catId[]"'.$selected.' value="'.$cat_id.'" />';
    						if($plxAdmin->aCats[$cat_id]['active'])
    							echo '<label for="cat_'.$cat_id.'">&nbsp;'.plxUtils::strCheck($cat_name['name']).'</label><br />';
    						else
    							echo '<label for="cat_'.$cat_id.'">&nbsp;<em>'.plxUtils::strCheck($cat_name['name']).'</em></label><br />';
    					}
    				?>
    				<?php if($_SESSION['profil'] < PROFIL_WRITER) : ?>
    				<p><label for="id_new_catname"><?php echo L_NEW_CATEGORY ?>&nbsp;:</label></p>
    				<?php plxUtils::printInput('new_catname','','text','17-50')	?>
    				<input class="button new" type="submit" name="new_category" value="<?php echo L_CATEGORY_ADD_BUTTON ?>" />
    				<?php endif; ?>
    

    j'ai essayé de placer à plusieurs endroits le bout de code suivant mais sans résultat !
    [== PHP ==]
    ksort($plxAdmin->aCats);
    

    Je continue mes recherches, en tout cas merci de m'avoir mis sur la voie...
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    Effectivement, c'est dans core/admin/article.php que cela se passe.
    Et il faut prendre la fonction asort(). Je reprends le code que tu donnes en utilisant un array temporaire plutôt que de modifier $plxAdmi->aCats. Les anciennes lignes de code sont en commentaires et tu peux les supprimer :
    [== PHP ==]
    <p><label><?php echo L_ARTICLE_CATEGORIES ?>&nbsp;:</label></p>
    	<?php
    	$selected = (is_array($catId) AND in_array('000', $catId)) ? ' checked="checked"' : '';
    	echo '<input readonly="readonly" disabled="disabled" type="checkbox" id="cat_unclassified" name="catId[]"'.$selected.' value="000" /><label for="cat_unclassified">&nbsp;'. L_UNCLASSIFIED .'</label><br />';
    	$selected = (is_array($catId) AND in_array('home', $catId)) ? ' checked="checked"' : '';
    	echo '<input type="checkbox" id="cat_home" name="catId[]"'.$selected.' value="home" /><label for="cat_home">&nbsp;'. L_CATEGORY_HOME_PAGE .'</label><br />';
    	$buf = $plxAdmin->aCats;
    	asort($buf);
    	// foreach($plxAdmin->aCats as $cat_id => $cat_name) {
    	foreach($buf as $cat_id => $cat_name) {
    		$selected = (is_array($catId) AND in_array($cat_id, $catId)) ? ' checked="checked"' : '';
    		echo '<input type="checkbox" id="cat_'.$cat_id.'" name="catId[]"'.$selected.' value="'.$cat_id.'" />';
    		// if($plxAdmin->aCats[$cat_id]['active'])
    		if($buf[$cat_id]['active'])
    			echo '<label for="cat_'.$cat_id.'">&nbsp;'.plxUtils::strCheck($cat_name['name']).'</label><br />';
    		else
    			echo '<label for="cat_'.$cat_id.'">&nbsp;<em>'.plxUtils::strCheck($cat_name['name']).'</em></label><br />';
    		}
    ?>
    	<?php if($_SESSION['profil'] < PROFIL_WRITER) : ?>
    	<p><label for="id_new_catname"><?php echo L_NEW_CATEGORY ?>&nbsp;:</label></p>
    	<?php plxUtils::printInput('new_catname','','text','17-50')	?>
    	<input class="button new" type="submit" name="new_category" value="<?php echo L_CATEGORY_ADD_BUTTON ?>" />
    <?php endif; ?>
    
  • J'étais de mon côté en train de tester avec $sort='alpha' et $order='alpha' mais sans résultat.

    Un grand merci à toi, ça fonctionne parfaitement 8)
  • Je viens également d'appliquer ta méthode au fichier core / admin / index.php
    Et la liste déroulante de filtrage des catégories s'affiche maintenant aussi selon l'ordre alphabétique :)
Connectez-vous ou Inscrivez-vous pour répondre.