Catégories sur trois niveaux
Le plugin plx-gc-categories dans sa version V3.5.8.10
permet maintenant de gérer des catégories sur 3 niveaux dans PluXml et est compatible avec la version 5.8.10 de PluXml.
Cette évolution du plugin, tente de suivre les évolutions du CMS PluXml qui se sont accélérer depuis peu. En effet, un nouveau responsable et contributeur prolifique à repris Les rênes de ce CMS Français.
A l'occasion de cette mise à jour pour le rendre compatible avec le code de la version 5.8.10 de PluXml, un script est aussi disponible pour vous permettre de créer des menus sur 3niveaux
Cet article vous informe de cette mise à jour, mais surtout vous partage ce script à intégrer dans vos thèmes.
Cette derniere version, vous permet aussi de filtrer ou non vos catégories principales au cours de la navigation, contrairement aux premières versions de ce plugin qui faisait ce filtrage en scindant votre site en fonction de la catégories principale active ou de(s) la (les) catégorie(s) d'un article.
Ce choix est disponible dans la page de configuration du plugin. Par défaut, les catégories sont cloisonnées au cours de la navigation, comme l'est, les premières versions.
Un script pour refleter la hierarchie des catégories.
Le plugin permettais d'afficher les catégories mére dans la barre de navigation à la façon des groupes de pages statiques, sans toutefois reproduire un tel menu dans la sidebar.
En attendant la mouture de la version 6.0 de pluxml et la réécriture de ce plugin à cette occasion, je vous propose un script à insérer dans votre thème pour afficher vos catégories dans une imbrication HTML.
Par défaut ce script génère des listes (ul), mais est paramétrable sur la structure de votre choix en y appliquant vos propres `balises` et `class`
À propos de ce script à utiliser dans vos thèmes:
- il est compatible avec une version antérieur du plugin
- ne nécessite pas de mettre en place un système à 3 niveaux de catégories
- teste seulement si un niveau inférieur existe.
- Affiche la listes des derniers articles d'une catégorie
- Ce script test la disponibilité du plugin et repasse en mode normal d'affichages des catégories.
Script à ajouter au théme (sidebar) en remplacement de la fonction de base:
<h3>
<?php $plxShow->lang('CATEGORIES'); ?>
</h3>
<?php
if (class_exists('categories')) {
$lvl1='ul';
$lvl2='ul';
$lvl3='ul';
$title='span';
$kid='li';
$mark= 'mark';
$menuCat=array();
$subCat=array();
$subsubCat=array();
?>
<style>
.plx-cat mark {
display: inline-block;
background: none;
float: left;
rotate: -90deg;
translate: -100%;
transition:0.25s;
margin-inline-end:-1em;
}
.plx-cat mark:before {
content: '\2b9f';
}
.plx-cat ul {
display: none
}
.plx-cat:hover li:hover > ul {
display:block
}.plx-cat:hover li:hover > mark {
rotate:0deg;
}
ul:empty,li:empty,li>mark:first-child {
display: none;
}
</style>
<?php
foreach($plxShow->plxMotor->aCats as $k => $ar) {
// on recherche les catégories qui ne sont ni fille ni mére
if($ar['mother'] =='0' && $ar['daughterOf'] =='000' && $ar['active'] =='1') {
$menuCat[$k] =$k;
}
// on recherche les catégories uniquement mére
if($ar['mother'] =='1' && $ar['active'] =='1') {
$menuCat[$k]=$k;
}
// on recherche les catégories qui sont fille et mére
if($ar['mother'] =='0' && $ar['daughterOf'] !='000' && $ar['active'] =='1' ) {
$bothCat[$ar['daughterOf']][]=array($k=>$k);
}
// on recherche les catégories qui sont fille
if($ar['mother'] =='0' && $ar['daughterOf'] !='000' && $ar['active'] =='1' ) {
// fille de 3eme niveau
if ($plxShow->plxMotor->aCats[$ar['daughterOf']]['daughterOf'] !='000') {
$subsubCat[$ar['daughterOf']][]=$k;
}
else {
// fille de second niveau
$subCat[$ar['daughterOf']][]=$k;
}
}
}
if($menuCat) {// on a un premier niveau, let's go
echo '<'.$lvl1.' class="cat-list unstyled-list plx-cat">'.PHP_EOL;
foreach($menuCat as $order => $category ) {
echo '<'.$kid.'>'.PHP_EOL ;
$plxShow->catList('','<a id="#cat_id" class="#cat_status" data-mother="#cat_mother" data-daughter="#data_daughter" a href="#cat_url" title="#cat_name">#cat_name</a> '.PHP_EOL, $category);
if (array_key_exists($category,$subCat)) {
echo "<$mark></$mark>";
echo '<'.$lvl2.' class="cat-list unstyled-list">'.PHP_EOL;
foreach($subCat[$category] as $k => $v ){
echo '<'.$kid.'>'.PHP_EOL ;
$plxShow->catList('','<a id="#cat_id" class="#cat_status" data-mother="#cat_mother" data-daughter="#data_daughter" a href="#cat_url" title="#cat_name">#cat_name</a>'.PHP_EOL, $v);
if (array_key_exists($v,$subsubCat)) {
echo "<$mark></$mark>";
echo '<'.$lvl3.' class="cat-list unstyled-list">';
foreach($subsubCat[$v] as $ksub => $vsub ){
$plxShow->catList('','<'.$kid.'><a id="#cat_id" class="#cat_status" data-mother="#cat_mother" data-daughter="#data_daughter" a href="#cat_url" title="#cat_name">#cat_name</a></'.$kid.'>'.PHP_EOL, $v );
// affichage derniers articles categorie
echo '<ul>';
if($plxShow->plxMotor->aCats[$ksub]['articles'] > 0 ){
echo'<li><small>'.$plxShow->getLang('LATEST_ARTICLES').'</small></li>';
$plxShow->lastArtList(' <li class="#art_status"><a href="#art_url" title="#art_title">#art_title</a></li>',3, intval($subsubCat[$v][$vsub]));
}
else {
echo'<li><small>'.L_NO_ARTICLE.'</small></li>';
}
echo '</ul>';
}
echo "</$lvl3>".PHP_EOL;
}
else {// affichage derniers articles categorie
echo '<ul>';
if($plxShow->plxMotor->aCats[$v]['articles'] > 0 ){
echo '<li><small>'.$plxShow->getLang('LATEST_ARTICLES').'</small></li>';
$plxShow->lastArtList(' <li class="#art_status"><a href="#art_url" title="#art_title">#art_title</a></li>',3, intval($v));
}
else {
echo'<li><small>'.L_NO_ARTICLE.'</small></li>';
}
echo '</ul>';
}
echo '</'.$kid.'>'.PHP_EOL ;
}
echo "</$lvl2>".PHP_EOL;
}
else {// affichage derniers articles categorie
echo '<ul>';
if($plxShow->plxMotor->aCats[$order]['articles'] > 0 ){
echo '<li><small>'.$plxShow->getLang('LATEST_ARTICLES').'</small></li>';
$plxShow->lastArtList(' <li class="#art_status"><a href="#art_url" title="#art_title">#art_title</a></li>',3, intval($order));
}
else {
echo'<li><small>'.L_NO_ARTICLE.'</small></li>';
}
echo '</ul>';
}
echo '</'.$kid.'>'.PHP_EOL;
}
echo "</$lvl1>".PHP_EOL;
}
}
else { // pas de plugin categories activé on repasse en affichage natif
?>
<ul class="cat-list unstyled-list">
<?php
$plxShow->catList('','<li id="#cat_id" class="#cat_status" data-mother="#cat_mother" data-daughter="#data_daughter"><a href="#cat_url" title="#cat_name">#cat_name</a> <span> (#art_nb)</span></li>');
?>
</ul>
<?php
}
?>
Ce code est une base, à vous de décider quoi en faire et quelles modifications d'affichages à y apporter .
Par exemple cette portion pour ne pas afficher les derniers articles.
else {// affichage derniers articles categorie echo '<ul>'; if($plxShow->plxMotor->aCats[$order]['articles'] > 0 ){ echo '<li><small>'.$plxShow->getLang('LATEST_ARTICLES').'</small></li>'; $plxShow->lastArtList(' <li class="#art_status"><a href="#art_url" title="#art_title">#art_title</a></li>',3, intval($order)); } else { echo'<li><small>'.L_NO_ARTICLE.'</small></li>'; } echo '</ul>'; }
Cette structure apparait 3 fois pour 3 niveaux possibles. Elle n'est utilisée que si elle se trouve sur le dernier niveau(1,2, ou 3 selon la hierarchie de vos catégories).