[plugin] plxmenu : menu automatique avec sous-menus
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 :
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) :
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 version ► plxmenu
• 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
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 version ► plxmenu
• 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
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
J'ai mis en ligne la version 1.1 corrigée.
Merci Francis.
A noter :
- tu peux déclarer ton shortcode dans le plugin plxmenu maintenant
- plus besoin de shortcode_p
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 !
Le problème est corrigé avec la version 1.3 : voir le téléchargement à partir du message initial.
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.
lien et historique dans le premier message.