Menu 100% administrable à la wordpress

je-evrardje-evrard Member
août 2014 modifié dans Discussions générales
Salut à tous,

J'ai dans l'idée de faire un plugin de menu sur 1 ou deux niveaux 100% administrable (pas automatique donc ou peut-etre une option dans la configuration pour démarrer).

J'ai déja attaqué bien sur.

La partie adminstration est plus ou moins réglée (via spxdatas). On pourra créer un ou plusieurs menus un peu comme spxwpolaroid et spxwunslider.
J'ai rajouté la possiblité de faire des drag and drop sur deux niveaux :
[list=*]
[*]vertical pour modifier l'ordre[/*]
[*]horizontal pour les niveaux (menu sous menu)[/*]
[/list]

Pour le menu lui meme on a le choix entre pages statiques, catégories, liens externes ou internes.

A l'usage c'est très simple vous verrez.

Le problème n'est pas vraiment la.

Dans un site on peux souvent dire que l'on a plus ou moins trois menus :

- Un menu principal incluant menu sous menu
- Un menu sur le coté parfois utilie et éventuellement avec des sous menu
- Un menu dans le footer en ligne le plus souvent

Ces menus ont le plus souvent une structure en liste.

Pour récupérer le menu on peux imaginer le système suivant sous forme de shorcode placé dans le thème, dans un article ou dans une page statique.
[== Indéfini ==]
[SPXWMENU id=001]

Par default le menu peux renvoyer une structure html comme pour worpress.

Voir une vidéo sur le sujet : https://www.youtube.com/watch?v=M_L1pl3FQ_E

Le début du code de wordpress est intéressant pour les options du menu.
[== Indéfini ==]
/**
 * Displays a navigation menu.
 *
 * @since 3.0.0
 *
 * @param array $args {
 *     Optional. Array of nav menu arguments.
 *
 *     @type string        $menu            Desired menu. Accepts (matching in order) id, slug, name. Default empty.
 *     @type string        $menu_class      CSS class to use for the ul element which forms the menu. Default 'menu'.
 *     @type string        $menu_id         The ID that is applied to the ul element which forms the menu.
 *                                          Default is the menu slug, incremented.
 *     @type string        $container       Whether to wrap the ul, and what to wrap it with. Default 'div'.
 *     @type string        $container_class Class that is applied to the container. Default 'menu-{menu slug}-container'.
 *     @type string        $container_id    The ID that is applied to the container. Default empty.
 *     @type callback|bool $fallback_cb     If the menu doesn't exists, a callback function will fire.
 *                                          Default is 'wp_page_menu'. Set to false for no fallback.
 *     @type string        $before          Text before the link text. Default empty.
 *     @type string        $after           Text after the link text. Default empty.
 *     @type string        $link_before     Text before the link. Default empty.
 *     @type string        $link_after      Text after the link. Default empty.
 *     @type bool          $echo            Whether to echo the menu or return it. Default true.
 *     @type int           $depth           How many levels of the hierarchy are to be included. 0 means all. Default 0.
 *     @type string        $walker          Allows a custom walker class to be specified. Default empty.
 *     @type string        $theme_location  Theme location to be used. Must be registered with register_nav_menu()
 *                                          in order to be selectable by the user.
 *     @type string        $items_wrap      How the list items should be wrapped. Default is a ul with an id and class.
 *                                          Uses printf() format with numbered placeholders.
 * }
 * @return mixed Menu output if $echo is false, false if there are no items or no menu was found.

 */


function wp_nav_menu( $args = array() ) {
	static $menu_id_slugs = array();

	$defaults = array( 'menu' => '', 'container' => 'div', 'container_class' => '', 'container_id' => '', 'menu_class' => 'menu', 'menu_id' => '',
	'echo' => true, 'fallback_cb' => 'wp_page_menu', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', 'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>',
	'depth' => 0, 'walker' => '', 'theme_location' => '' );

Ainsi on peux imaginer ceci par exemple
[== Indéfini ==]
[SPXWMENU id=001 menu_class='mymenu' menu_id='idmymenu' ]

ce qui donne

<ul id='idmymenu' class='mymenu'>
<li>...</li>
...
<ul>

Les paramètres vont permettre de définir la sortie de notre menu html.

Qu'en pensez-vous ?

Réponses

  • FrédéricFrédéric Member
    juillet 2014 modifié
    Bonjour Jérôme,

    Ton analyse sur les 3 'type' de menu est très bonne mais ne le prends pas mal, toutes ses ID et class dans Wordpress me font un mal de tête et alourdie le rendus au final pour pas grand chose.

    Ensuite il est vrai que ce qui peux manquer dans PluXml, c'est la gestion sur 2 niveau la navigation.

    A mon avis ça serait peut être mieux de rendre la tâche plus facile est automatiser en exploitant les groupes de pages statiques qui pour le moment peux ce faire via js pour réaliser un menu déroulant (voir article sur Pluxopolis pour rappel).

    En tout cas merci pour ce futur plugin ;)
  • je-evrardje-evrard Member
    juillet 2014 modifié
    Salut Frédéric,

    Je ne le prends pas mal :) et tu viens justement de me donner une idée (merci). Il m'est tout à fait possible d'automatiser les groupes de page statiques dans l'administration.

    Dans l'admin du menu pour chaque lien j'ai le choix de la cible entre :
    [list=*]
    [*]pages statiques[/*]
    [*]catégories[/*]
    [*]liens externes ou internes[/*]
    [/list]


    Je peux rajouter à cette liste le groupe de page statique qui va permettre de rajouter x liens (du groupe) dans la structure html de l'arbre du menu (automatiquement donc).

    On peux donc avoir :

    [list=*]
    [*]pages statiques[/*]
    [*]groupes de pages statiques[/*]
    [*]catégories[/*]
    [*]liens externes ou internes[/*]
    [/list]

    Je sais que wordpress est une usine à gaz, mais il y a tout de même de bonnes idées a "piquer". L'idée est justement de faire le plus simple et le plus puissant possible.

    Le débat est ouvert.
  • juillet 2014 modifié
    Complètement d'accord pour un menu automatique des pages statiques !

    WordPress a plein de bonnes choses mais la gestion des menus de pages statiques est complètement nulle (AMHA) : on définit une hiérarchie des pages, et pour les menus, on est obligé de dupliquer cette même hierarchie ! Faire deux fois le même boulot, c'est chercher à provoquer des erreurs.

    Je trouve la logique de PluXml avec les pages statiques intégrés dans le menu directement beaucoup plus censée.
    Si on définit plusieurs menus, il suffirait de changer la liste déroulante Afficher | Masquer, par une liste Menu 1 | Menu 2 | Menu 3 | Masquer. On ajoute la gestion de sous menus avec les groupes et il n'y a pas besoin de plus !
    Après c'est sur qu'on peut envisager de faire un menu complètement configurable mais combien d'utilisateurs de PluXml, en ont-ils besoin ?

    Bonne journée.
  • Ce qui serait bien serait d'obtenir la même chose avec les catégories et les articles qu'avec les pages statiques, mais en limitant le nombre d'articles avec un paramètre. Ça serait un vrai plus.
  • +1 pour Jerry.
  • +1 aussi avec Jerry et ComputingFroggy.
    Le plugin menu de ouf :)
  • Je pensais plus à une amélioration de la fonction native catList qu'à un plugin. ;)
  • je-evrardje-evrard Member
    juillet 2014 modifié
    Moi plus au plugin :) .
  • je-evrardje-evrard Member
    août 2014 modifié
    Voici les premières images :

    Le plugin : spxwmenu

    1.png

    Le premier menu test

    2.png

    L'édition du menu test

    3.png

    Le drag and drop verticale et horizontale

    4.png

    Les options de liens (je vais rajouter les options dont on a parlé)

    5.png

    Le shortcode menu dans un article
    6.png

    L'affichage du menu

    7.png

    A+

    jéjé
  • MiKLMiKL Member
    Bonjour Jérôme,

    Franchement, chapeau bas !!! Excellent boulot ton plug-in !
    Il est vrai que la manipulation du menu dans PluXml et réduit au strict minimum.
    Avec ce plug-in ce sera du pur bonheur :)
    J’ai hâte de pouvoir le tester et de pouvoir l’intégrer dans mon prochain thème. :)
    Bonne continuation....
  • je-evrardje-evrard Member
    septembre 2014 modifié
    Hello Mikl,

    Le plugin est en bonne voie, mais je dois d'abord finir un gros projet (priorité oblige). [del]Je pense que mi septembre il sera la[/del].

    Ne pas hésiter à apporter vos idées d'amélioration.

    a+

    jerome
  • C'est parfait, je crois qu'il va servir dans pas mal de mes adaptations que j'ai sous le coude. ;)
  • Salut les gars et les filles,

    Bon ça avance très bien mais encore du boulot dessus.

    Pour ce qui est fait et à faire :

    - gestion du drag and drop horizontal lattéral : ok
    - url groupes statiques + url article catégories : ok
    - intégration libraies css + javascript menu bootstrap optionnelles : ok
    - personnalisation du menu via le shortcode (class, id, select personnaisable dans les noms): ok --> va permettre de s'adapter a des structure html différentes (superfish...)
    - traductions de l'admin : en cours
    - interprétation d'un menu de 3ème niveau (pour groupe statique et articles catégories) : à faire
    - Aide : à faire

    Bon ben c'est pas loin..

    a+


    jéjé
  • Salut Jéjé,

    Ce menu paraît très intéressant.
    J'aimerais savoir si on pourrait y mettre aussi les pages Articles ?

    Je fais tous mes sites avec des articles, ça me permet d'utiliser le filtrage par catégorie (pour les sous-menus) et à l'occasion le plugin ChampArt.

    L'idéal serait qu'on puisse en option faire figurer la liste des articles dans les liens proposés. :
    - si comme moi, on utilise les articles pour les pages du site, c'est indispensable.
    - pour celui qui utilise les pages statiques pour son site, avec à côté un blog comprenant pas mal d'articles, ça lui éviterait d'encombrer la liste de choix avec tout ces articles.

    Qu'en penses-tu ?
  • je-evrardje-evrard Member
    septembre 2014 modifié
    Salut Francis,

    Le projet spx (pour ceux qui connaissent) propose pour le moment un menu avec des liens ciblant uniquement pages statique, catégorie et liens personnalisés internes et externes.

    Ce nouveau menu change la donne car il va permettre la même chose mais avec deux autres options :

    [list=*]
    [*]1) Groupe de pages statiques[/*]
    [*]2) Articles catégories[/*]
    [/list]

    8.png

    Concrètement cela va permettre de créer automatiquement un sous menus constitué soit des pages statiques d'un meme groupe ou des x derniers articles d'une catégorie (pour les articles une option permettra d'en limiter le nombre.)
    J'aimerais savoir si on pourrait y mettre aussi les pages Articles ?

    Cela te convient-il ?

    A+

    jéjé
  • FrancisFrancis Member
    septembre 2014 modifié
    D'accord, si j'ai bien compris :
    - on choisit une catégorie dans "Articles catégories" => tous les articles de cette catégorie vont se trouver dans le sous-menu en question.
    - l'ordre des articles se fait en changeant les dates, ils sont classés par ordre de date décroissante.

    J'avais fait quelque chose de ce genre pour le plugin plxmenu, mais de façon plus rustique (pas du tout graphique !) et moins complète, puisque ce plugin ne liste que des articles.

    En fait, ce que j'imaginais, c'était un menu comme dans Joomla, où pour chaque lien, on choisit un article, ou un lien externe, ou autre chose..., et on lui attribue un texte dans ce menu.
    Mais ce genre de truc est plus complexe à faire, ton menu doit déjà l'être pas mal ! :)
  • Francis a écrit:
    D'accord, si j'ai bien compris :
    - on choisit une catégorie dans "Articles catégories" => tous les articles de cette catégorie vont se trouver dans le sous-menu en question.
    - l'ordre des articles se fait en changeant les dates, ils sont classés par ordre de date décroissante.

    C'est tout à fait ça !
    Francis a écrit:
    En fait, ce que j'imaginais, c'était un menu comme dans Joomla, où pour chaque lien, on choisit un article, ou un lien externe, ou autre chose..., et on lui attribue un texte dans ce menu.

    Je peux dans une future version proposer une option pour que la liste renvoie aussi directement les articles (en les limitant éventuellement).A cogiter.
    Francis a écrit:
    Mais ce genre de truc est plus complexe à faire, ton menu doit déjà l'être pas mal !

    Il est en fait d'une complexité moyenne. La partie administration est grandement simplifiée par spxdatas (juste à en faire la description). La partie affichage est intéressante et encore non finalisée mais bien avancée. Etant sur un autre projet actuellement je travaille sur ce plugin en dilettante sans me prendre la tête et sans me mettre la pression. En fait, ce genre de plugin viendra enrichir le futur projet spx5. Mais bon, chaque chose vient en son temps.

    A+
  • Merci Jéjé pour ces précisions.

    On attend ton plugin, mais il n'y a pas le feu, tu t'es déjà mis pas mal de pression pendant des mois avec le méga-plugin spxdatas !

    @+ pour des nouvelles ! :)
  • Un petit bilan d'avancement :

    OK

    - gestion du drag and drop horizontal lattéral : ok
    - url groupes statiques + url article catégories : ok
    - intégration libraies css + javascript menu bootstrap optionnelles : ok
    - personnalisation du menu via le shortcode (class, id, select personnaisable dans les noms): ok --> va permettre de s'adapter a des structure html différentes (superfish...)
    - interprétation d'un menu de 3ème niveau (pour groupe statique et articles catégories) : ok

    A FAIRE

    - traductions de l'admin : en cours
    - Aide : à faire


    a+

    jéjé
  • Hello les amis,

    J'ai pris du retard comme d'habitude. J'espère pouvoir sortir le plugin dans moins de 15 jours...

    a+

    jéjé
  • Pas de souci.

    Passe en mode Debian : « Ça sort quand c'est prêt ! » ;)


    à plus,

    Gzyg
  • Mode Debian activé ! :)
  • Pas mal ça le mode debian :D
  • Ca va arrivé, je n'ai pas oublié... J'avais trop de trucs en cours...
  • je-evrardje-evrard Member
    avril 2015 modifié
    Une petite version de test arrive prochainement. Qui veut tester ?
  • Moi je veux bien...
  • je-evrardje-evrard Member
    avril 2015 modifié
    Hello Jerry,

    Le plugin est disponible dans le depot spx (spxwmenu).

    Pour le moment la doc n'est pas a jour et les fichiers de traduction ne sont pas fait (version 1.1)

    Le plugin nécessite spxdatas et spxshortcodes. pour Spxdatas l'installation se fait maintenant en 1 clic depuis la config du plugin (version 1.72).

    j'ai mis en, place une Demo live pour montrer le plugin. (demo-spx5)

    Il utilise le thème par default avec la modifs suivantes :

    1 shortcode dans header.php
    [== Indéfini ==]
    </nav> -->
    <nav role="navigation">
    
    [SPXWMENU id=001 menu_type='bootstrap' ]
    
    </nav>
    

    1 shorcode dans Sidebar.php
    [== Indéfini ==]
    <h3>Sous menu</h3>		
    [SPXWMENU id=002 menu_type='default' ]
    

    La démo utilise donc deux menus différents (1 bootstrap et 1 default)

    Vous pouvez vous connecter dans l'admin ici (login : demo password : demo). Partie widget / menus

    Les widgets spxdatas s'étoffent petit à petit.

    a+

    jéjé
Connectez-vous ou Inscrivez-vous pour répondre.