[plugin] plxmenu : menu automatique avec sous-menus

FrancisFrancis Member
octobre 2017 modifié dans Plugins
Comme PluXml ne propose pas encore de gestion de menu (Spxdatas en propose une géniale, mais pour les pages statiques), voici un plugin qui crée un menu et des sous-menus automatiques, en listant les articles des catégories données pour chaque niveau de menu (ordre des articles déterminé par leur date).
Il est téléchargeable ici.

Explications
Ce plugin crée automatiquement un menu, à partir de la liste des articles d'une catégorie.

Pour afficher un sous-menu sous un article, il suffit d'associer le n° de l'article avec le n° de la catégorie pour le sous-menu (par ex. artcat="art16-cat7"), avec plusieurs associations possibles, séparées par des virgules et dans un ordre quelconque (par ex. artcat="art8-cat5, art16-cat7, art2-cat3").
La fonction étant récursive, il n'y a pas de limitation dans la profondeur des sous-menus.

Exemple d'utilisation
Voici nos catégories :
1 : Menu principal (articles Accueil, Fruits, Légumes, Contact)
2 : Pied de page (articles Mentions légales, Plan du site)
3 : Fruits (articles Pommes, Poires, Oranges)
4 : Légumes (articles Carottes, Salades, Haricots verts)
5 : Types de poires (articles Poires William, Poires Abbate, Poires Rocha)

L'objectif est d'obtenir le menu suivant (ici à trois niveaux) :
• Accueil (article 1)
• Fruits (article 2, associé à la catégorie 3)
- Pommes (article 3)
- Poires (article 4, associé à la catégorie 5)
. Poires William (article 11)
. Poires Abbate (article 12)
. Poires Rocha (article 13)
- Oranges (article 5)
• Légumes (article 6, associé à la catégorie 4)
- Carottes (article 7)
- Salades (article 8 )
- Haricots verts (article 9)
• Contact (article 10)

Il faut donc écrire en PHP :
[== PHP ==]
$menu =  eval($plxShow->callHook('plxmenu', array('numcat'=>'1', 'artcat'=>'art2-cat3, art6-cat4, art4-cat5')));
echo $menu;

ou pour l'affichage de ce menu à l'intérieur d'une page, le shortcode suivant qui affiche la valeur fournie par le plugin (le plugin spxshortcodes doit être activé, le shortcode plxmenu est inclus dans le plugin) :
[-p-plxmenu numcat="1" artcat="art2-cat3, art6-cat4, art4-cat5"]
- Le "-p-" avant plxmenu sert à enlever le paragraphe p autour du shortcode (pour éviter d'avoir <p><ul> ... </ul></p> si le shortcode est écrit dans un éditeur Wysiwyg).

Pour un menu sans sous-menu, il suffit de ne pas mentionner le paramètre artcat (ou de lui attribuer une chaîne vide).

- Début de chaque liste (par défaut, c'est le début de balise ul) : menudebut="..." pour le menu de niveau 1, sousmenudebut="..." pour tous les sous-menus.
- Fin de chaque liste (par défaut, c'est la fin de balise ul) : menufin="..." pour la liste principale, sousmenufin="..." pour tous les sous-menus
=> ceci permet de fournir une balise ul avec une classe, ou bien de ne pas mettre de balise ul pour les sous-menus (dans ce cas, la fin de balise li pour l'article se trouve avant le sous-menu qui lui est associé).

- Classe attribuée à chaque ligne de la liste (par défaut, pas de classe) :
classli="..." pour les lignes du menu de niveau 1, sousmenuclassli="..." pour les lignes de tous les sous-menus.

- Tri des articles dans le menu de niveau 1 : tri="date" (valeur par défaut) pour un affichage par ordre de dates croissantes, tri="dateinv" pour un ordre de dates décroissantes.
- Tri des articles dans tous les sous-menus : sousmenutri="date" (valeur par défaut) pour un affichage par ordre de dates croissantes, sousmenutri="dateinv" pour un ordre de dates décroissantes.

Téléchargement de la dernière versionplxmenu

Historique des versions

## Version 1.5 (30/10/2017) ##
[+] Ajout du shortcode dans le plugin (modification du fichier plxmenu.php et ajout du dossier spxshortcodes)

## Version 1.4 (17/03/2016) ##
BUG Remplacement de < et > par < et > dans les paramètres (entités HTML créées par l'éditeur Wysiwyg)

## Version 1.3 (26/09/2014) ##
BUG Correction de bogue lorsqu'il y a plusieurs sous-menus

## Version 1.2 (16/06/2014) ##
BUG Corrections diverses

## Version 1.1 (08/05/2014) ##
BUG Correction d'erreurs

## Version 1.0 (04/05/2014) ##
Version initiale

Réponses

  • FrancisFrancis Member
    mai 2014 modifié
    Pour ceux qui auraient téléchargé la version 1.0, elle comportait des erreurs.
    J'ai mis en ligne la version 1.1 corrigée.
  • Ça m'a l'air prometteur tout ça. À tester.
    Merci Francis.
  • Juste pour dire que je vais l'utiliser sur un de mes projets. Merci Francis. {) :D
  • J'avais pas vu ce post. Merci francis.

    A noter :

    - tu peux déclarer ton shortcode dans le plugin plxmenu maintenant
    - plus besoin de shortcode_p :)
  • Merci Jerry, ça fait plaisir de voir que ce plugin est utile à la communauté :)

    Et merci aussi Jérôme, j'avais oublié de modifier ce post, depuis que le plugin shortocode_p est inclus dans spxshortcodes.
    Ça y est, c'est rectifié et c'est plus simple comme ça !
  • Juste une petite remarque. Il y a une erreur si tu utilises return dans ta fonction plxmenu principale (c'est dû à l'utilisation d'eval() je crois). Pour l'éviter, il faut le remplacer tout simplement par un echo.
  • Le plugin plxmenu ne fonctionnait pas bien lorsqu'il y avait plusieurs sous-menus, je m'en suis aperçu il y a peu.

    Le problème est corrigé avec la version 1.3 : voir le téléchargement à partir du message initial.
  • FrancisFrancis Member
    octobre 2017 modifié
    Version 1.4 qui corrige un problème, lorsqu'une balise HTML de début de liste est spécifiée, par exemple :
    [-p-plxmenu numcat="3" menudebut="<ul class='page_sousmenu'>"]
    
    où les symboles < et > sont remplacés par < et > par CKEditor :
    <p>[-p-plxmenu numcat="3" menudebut="&lt;ul class='page_sousmenu'&gt;"]</p>
    

    NB : Le shortcode plxmenu est inclus dans le plugin depuis la version 1.5, il faut bien sûr avoir installé et activé le plugin shortcode.

    Lien et historique dans le premier message.
  • Version 1.5 en ligne, avec shortcode intégré :
    lien et historique dans le premier message.
Connectez-vous ou Inscrivez-vous pour répondre.