SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

290 Plugins, 198 contribs sur SPIP-Zone, 76 visiteurs en ce moment

Accueil > Navigation > Gérer les menus > Ajouter des types d’entrées pour les menus

Ajouter des types d’entrées pour les menus

18 août 2009 – par RastaPopoulos – commentaires

19 votes

Afin d’être facilement extensibles, les types d’entrées sont tous définis dans des squelettes SPIP configurables. Nous allons voir comment les écrire.

Placer les fichiers

Un type d’entrée se définit grâce à un squelette SPIP associé à un fichier XML le décrivant. Les deux fichiers ayant le même nom.

Ces fichiers doivent être placé dans un dossier menus/

On aura donc par exemple :

Le squelette

Il est composé de deux grandes parties :

  1. qu’affiche-t-on dans le formulaire de création des menus pour décrire l’entrée ?
  2. qu’affiche-t-on dans le menu lui-même ?

Pour les différencier, deux variables sont accessibles : #ENV{appel_formulaire} et #ENV{appel_menu}. Il suffit donc de les tester pour afficher les bonnes choses au bon endroit.

Pour le premier point, il s’agit juste d’une ligne qui va décrire le plus explicitement possible ce qu’aura configuré l’utilisateur. On affichera donc un titre, et des informations complémentaires. Deux classes CSS sont prévues pour cela : « titre », et « infos ».

Ce qui donne quelque chose du genre :

  1. [(#ENV{appel_formulaire}|oui)
  2.         <div class="titre">#ENV{titre}</div>
  3.         <div class="infos">#ENV{url}</div>
  4. ]

Télécharger

Maintenant il faut écrire ce qui sera vraiment inséré dans le menu final. Un type d’entrée peut ajouter une ligne avec un lien dans le menu. Ou plusieurs lignes. Ou plusieurs lignes en cascade (des sous-menus). Tout est possible.

Un type simple comme les liens arbitraires donne donc :

  1. [(#ENV{appel_menu}|oui)
  2.         <li class="entree">
  3.                 <a href="#ENV{url}">#ENV{titre}</a>
  4. ]

Télécharger

Pourquoi la balise LI n’est pas fermée ? : Pour les types d’entrées qui accepte des sous-menus, il ne faut pas fermer la balise, car le plugin va insérer le sous-menu à l’intérieur du <li>. C’est donc le plugin qui s’occupera de fermer la balise.
En revanche, lorsque votre type refuse les sous-menus, alors vous pouvez écrire normalement et fermer les balises comme il faut (comme dans le cas suivant par exemple).

Si vous avez besoin d’écrire des boucles à l’intérieur des tests, il faut alors utiliser la boucle (CONDITION) fournie par Bonux. Par exemple :

  1. <BOUCLE_test_menu(CONDITION){si #ENV{appel_menu}|oui}>
  2.         <BOUCLE_rub(RUBRIQUES){id_parent=#ENV{id_rubrique}}>
  3.                 <li><a href="#URL_RUBRIQUE">#TITRE</a></li>
  4.         </BOUCLE_rub>
  5. </BOUCLE_test_menu>

Télécharger

Le fichier XML de configuration

Ce fichier va permettre de décrire le type d’entrée afin d’afficher les choix lorsqu’on est dans le formulaire de création des menus. Il va notamment définir les paramètres dont le squelette aura besoin.

Voici à quoi il peut ressembler :

  1. <entree>
  2.         <nom>Nom du type d'entrée</nom>
  3.         <description>Une description détaillée expliquant à l'utilisateur ce que fera le squelette</description>
  4.         <icone>images/une_icone.png</icone>
  5.         <parametre nom="titre" label="Le titre du paramètre" obligatoire="oui" />
  6.         <parametre nom="url" label="menus:ou_une_chaine_de_langue" obligatoire="oui" />
  7.         <refuser_sous_menu />
  8. </entree>

Télécharger

La plupart de ces éléments sont assez explicites. Remarquez que l’on retrouve bien les deux paramètres dont nous avions besoin précédemment dans le squelette : #ENV{titre} et #ENV{url}.

L’élément <refuser_sous_menu/> permet d’interdire la création d’un sous-menu en-dessous des entrées de ce type. En effet, il arrive que des types créent déjà plusieurs entrées voire des sous-menus, comme lorsque l’on affiche les rubriques sur plusieurs niveaux. Dans ce cas, cela n’a aucun sens de pouvoir créer un sous-menu de cette entrée.

Et voilà !

Normalement vous savez tout pour créer vous-mêmes vos entrées personnalisées si ce que fournit le plugin Menus ne vous suffit pas.

En revanche, si vous pensez que vos créations ont une utilisation générique et qu’elles peuvent servir à d’autres, alors n’hésitez pas à les ajouter directement dans le plugin pour les partager avec tout le monde !

Dernière modification de cette page le 7 septembre 2009

Retour en haut de la page

Vos commentaires

  • Le 9 décembre 2014 à 14:30, par freebsnet En réponse à : Ajouter des types d’entrées pour les menus

    Bonjour,
    y a t-il possibilité de sélectionner une rubrique contenant des brèves ou des sites syndiqués ?
    y a t-il une méthode pour appeler une noisette ?
    cordialement

    Répondre à ce message

  • Le 4 octobre 2010 à 16:27, par bob En réponse à : Ajouter des types d’entrées pour les menus

    critère de tri ?

    # Critère de tri (numérique) [Facultatif]
    # Critère de tri (alphabétique) [Facultatif]

    Que remplir pour que s’affiche les articles dans le menu de manière antéchronologique ?
    J’aimerais avoir les derniers articles d’un mot clé par date inverse

    Répondre à ce message

  • Le 10 février 2010 à 13:11, par Valéry En réponse à : Ajouter des types d’entrées pour les menus

    En me basant sur le mécanisme décrit ici et sur l’un des modèles existant j’ai pu créer un type d’entrée listant tous les articles d’une rubrique.

    Pour le .html :

    1. [(#SET{id_rubrique, #ENV{id_rubrique}|intval})]
    2. [(#SET{tri_num, #ENV{tri_num}|ou{#ENV{tri_alpha}}|?{#ENV{tri_num},'titre'}})]
    3. [(#SET{tri_alpha, #ENV{tri_num}|ou{#ENV{tri_alpha}}|?{#ENV{tri_alpha},'titre'}})]
    4.  
    5. [(#ENV{appel_formulaire}|oui)
    6.         [(#SET{titre, #GET{id_rubrique}|?{#INFO_TITRE{rubrique, #GET{id_rubrique}}, <:info_racine_site:>}})]
    7.         <div class="titre">#GET{titre}</div>
    8.         <div class="infos">
    9.                 <br /><:menus:info_tri:> [(#GET{tri_num}) <:menus:info_tri_num:>][(#GET{tri_num}|et{GET{tri_alpha}}), ][(#GET{tri_alpha}) <:menus:info_tri_alpha:>]
    10.         </div>
    11. ]
    12.  
    13. <BOUCLE_test_menu(CONDITION){si #ENV{appel_menu}|oui}>
    14.         <BOUCLE_rub(RUBRIQUES){id_rubrique=#ENV{id_rubrique}}>
    15.                 <li class="menu-entree">#TITRE
    16.                         <B_articles>
    17.                         <ul class="menu-liste">
    18.                                 <BOUCLE_articles(ARTICLES){id_rubrique}>
    19.                                         <li class="menu-entree"><a href="#URL_ARTICLE">#TITRE</li></a>
    20.                                 </BOUCLE_articles>
    21.                         </ul>
    22.                         <B_articles>
    23.                 </li>
    24.         </BOUCLE_rub>
    25. </BOUCLE_test_menu>

    Télécharger

    et pour le .xml :

    1. <entree>
    2.         <nom>Liste d&rsquo;articles</nom>
    3.         <description>Affiche la liste des articles d&rsquo;une rubrique</description>
    4.         <icone>img/articles.png</icone>
    5.         <parametre nom="id_rubrique" label="menus:entree_id_rubrique" />
    6.         <parametre nom="tri_num" label="menus:entree_tri_num" />
    7.         <parametre nom="tri_alpha" label="menus:entree_tri_alpha" />
    8.         <refuser_sous_menu />
    9. </entree>

    Télécharger

    ça fonctionne comme j’en avais besoin. On pourrait en théorie ajouter des types de tris supplémentaires.

    • Le 10 février 2010 à 14:10, par RastaPopoulos En réponse à : Ajouter des types d’entrées pour les menus

      Ben si tu penses que c’est générique, n’hésite pas à l’ajouter au plugin. :)

    • Le 19 avril 2010 à 21:07, par Loiseau2nuit En réponse à : Ajouter des types d’entrées pour les menus

      Bien ça ! J’avais voulu bidouiller un truc en ce sens mais j’avais du me planter quelque part et ca n’a jamais voulu marcher. Du coup j’étais partis sur autre chose.

      Pour les tris en revanche, j’avoue que je n’ai pas encore compris quoi mettre dans les champs ?

    • Le 17 mai 2010 à 08:57, par Alain BOURDEAU En réponse à : Ajouter des types d’entrées pour les menus

      Bonjour,
      Après tatonnements, il suffit de mettre le nom du champ de la table concernée dans le type de trie.
      Par exemple si le menu est sur des mots clés :
      le trie numérique serait sur id_mot
      le trie alpha serait sur :titre

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?
  • [Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • PHANTOM (HTML5UP)

    18 juillet – commentaires

    Squelette SPIP pour intégrer le modèle Phantom de HTML5UP. https://html5up.net/phantom Installation A l’activation, le plugin installe aussi les plugins suivants : crayons, favicon, metasplus+, Couleur d’objet, champs extras, SPIP reset centre (...)

  • ScolaSPIP 3

    21 mai 2012 – 448 commentaires

    Un plugin-squelette personnalisable pour sites Web d’établissements scolaires

  • Formulaire d’upload en html5

    27 avril 2015 – 93 commentaires

    Un formulaire d’upload en html5 pour l’interface admin de SPIP. Ce plugin ajoute un système d’upload moderne à SPIP. Il peut être utilisé pour l’upload de masse. Ce système est basé sur dropzonejs. Utilisation Espace privé de SPIP Dans l’espace (...)

  • Passer un site SPIP sous https://

    23 février 2017 – 42 commentaires

    Comment migrer simplement votre site SPIP de http:// vers https:// Le protocole https:// devient de plus en plus courant : C’est mieux pour la vie privée de tous La plupart des grands sites l’a déjà adopté Certains navigateurs commencent à afficher (...)

  • SPIP 3.2, Agenda et FullCalendar

    6 juin – 20 commentaires

    Nous avions publié un article sur la manière d’utiliser FullCalendar avec SPIP 3.0 afin d’afficher des évènements sous forme d’Agenda. La version de FullCalendar a changé avec SPIP 3.2. Le présent article est donc un tutoriel adapté à SPIP 3.2. Pour (...)