SPIP - Contrib

SPIP - Contrib

[ar] [en] [es] [fr] [it]

273 visiteurs en ce moment

fontsizeup fontsizedown
Accueil du site > Contribs > Navigation > Menus contextuels > Archives Menus contextuels > Une arborescence dynamique et contextuelle
[202 commentaires]

Une arborescence dynamique et contextuelle

mercredi 23 avril 2003, par Nicolas Hoizey

  • Digg
  • Del.icio.us
  • Facebook
  • Google
  • Technorati
1 vote

Voici comment obtenir très simplement dans tout site SPIP un menu arborescent dynamique du plus bel effet. Comble de bonheur, il sait en plus être contextuel pour s’adapter à la page où il est affiché, et il a la bonne idée de se servir des fonctionnalités DHTML déjà présentes dans SPIP.

Voici comment obtenir très simplement dans tout site SPIP un menu arborescent dynamique du plus bel effet.

Comble de bonheur, il sait en plus être contextuel pour s’adapter à la page où il est affiché, et il a la bonne idée de se servir des fonctionnalités DHTML déjà présentes dans SPIP.

Voici donc comme promis depuis plus de six mois une version simplifiée et nettoyée du menu arborescent dynamique que nous (Clever Age) avons réalisée pour la partie du site EDF dédiée aux particuliers.

Voilà un exemple très parlant de ce que l’on peut en faire :

PNG - 11.4 ko
Sur le portail EDF
Le menu arborescent dynamique du site EDF pour les particuliers

Voyez par vous-même : http://particuliers.edf.fr/rubrique...

Et voilà ce que ça donne en installation de base :

PNG - 12.6 ko
Le menu dans les squelettes par défaut
Voilà ce que donne ce menu après simple ajout dans le squelette par défaut des rubriques.

Utilisation

Il suffit de télécharger le fichier ci-dessous, de le dézipper à la racine de votre SPIP en s’assurant au préalable qu’il n’y a pas déjà un fichier menu.html et/ou un fichier menu.php3.

Zip - 2.5 ko
Le menu arborescent dynamique

Ensuite, ajoutez par exemple dans le rubrique.html, à l’endroit où vous voulez voir le menu :

<INCLURE(menu.php3){id_rubrique}>

Personnalisation

Personnalisation des textes : couleurs, polices, tailles ...

La personnalisation s’effectue via la feuille de style présente dans le squelette menu.html :

<style>
.secteuroff { font-weight: bold; }
.rubriqueoff { font-weight: normal; }
.secteuron, .rubriqueon { font-weight: bold; color: #ff9999; }
.secteur, .rubrique { font-weight: bold; color: #ff3333; }
</style>

Une différentiation est faite entre les secteurs et les rubriques de niveaux inférieurs et entre ces mêmes éléments selon qu’ils font ou non partie de la hiérarchie de l’élément courant :

- secteuroff pour un secteur différent de celui de l’élément courant
- secteuron pour le secteur de l’élément courant
- rubriqueoff pour une rubrique n’appartenant pas à la hiérarchie de l’élément courant
- rubriqueon pour une rubrique appartenant à la hiérarchie de l’élément courant
- secteur pour un secteur si c’est l’élément courant
- rubrique pour la rubrique courante si ce n’est pas un secteur

Cette feuille de style peut éventuellement être retirée de ce squelette et replacée dans la feuille de style générale.

Personnalisation des images

Comme vous pourrez le lire ci-dessous, ce menu exploite des fonctions déjà présentes dans SPIP, mais utilise une copie des images concernées.

Il est donc possible de remplacer les images de pliage et dépliage par d’autres, mais à condition de les remplacer par des images de mêmes noms et de même taille : 16 x 14 pixels.

De même, les puces peuvent aussi être remplacées.

Pourquoi recopier le répertoire img_pack/ ?

Comme vous pourrez le voir dans le zip, il est nécessaire de reprendre dans la racine une partie du répertoire img_pack/ qui se trouve normalement dans ecrire/.

C’est tout simplement que ce menu exploite les fonctionnalités DHTML développées pour l’interface de publication de SPIP (ie ce qui se trouve dans ecrire/inc_layer.php3) plutôt que s’appuyer sur un script DHTML externe à la manière du menu proposé par Kangourou.

Or, les fonctions utilisées génèrent du code HTML faisant référence de manière relative aux images contenues dans img_pack, ce qui oblige à en faire une copie à la racine. Heureusement, cela permet par ailleurs la personnalisation expliquée ci-dessus.

Compatibilité

PlateformeNavigateurFonctionneNe fonctionne pas
Windows Internet Explorer 6.0 .
Windows Netscape 6.1, 7.02 4.51 [1]
Windows Mozilla 1.0, 1.3 .
Windows Phoenix 0.5 .
Windows Opera . 6.05 [1]
Windows Crazy Browser 1.05 .

Portfolio

Le menu dans les squelettes par défaut

Notes

[1] Toujours déplié

Retour en haut de la page

202 Messages de forum

Voir toute la discussion

Pages 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |...

  • Répondre à ce message

    23 mars 2007 13:47 , par Jean Luc Girard

    J’utilise depuis plusieurs annéers cette contrib pour un site alors merci pour ce louable partage ... mais le code html généré est monstrueux avec des appels à js dans tous les sens alors je migre vers une solution plus légère !

    Voir
    - http://www.spip-contrib.net/Une-arb...
    - http://www.spip-contrib.net/Menu-de...

    Ce serait quand même bien d’utiliser jquery pour une fonctionnalité comme ça...

  • Répondre à ce message

    12 janvier 2007 10:25 , par quincailler

    Bonjour à tous, Suis passé en 1.9.1, et je n’arrive pas à faire fonctionner normalement ce menu : je m’explique : Les rubriques sélectionnées ne "s’exposent" pas, et le plus important, contrairement aux sites mis en exemples, le menu ne reste pas déplié sur la rubrique où l’on se trouve. Sinon tout est affiché correctement, même si ca ne se déplie que sur le clique de la fleche et non pas de la rubrique. En gros le site d’edf cité en exemple (même si il y a une css) ne correspond pas du tout à la source, au niveau des fonctions... Quelqu’un aurait une source à jour 1.9.1 en exemple à proposer ? Merci

  • Répondre à ce message

    27 décembre 2006 10:55 , par fabricegely

    Suite à un problème de mise en forme dans mon message, je reprends les lignes magiques :

    SPIP $flag_ecrire = false ;

    include ’ecrire/inc/layer.php’ ;

    include_spip(’/inc/filtres’) ;

    Voir en ligne : http://gely.info

  • Répondre à ce message

    27 décembre 2006 10:53 , par fabricegely

    Bonjour à tous,

    Cela fait une semaine que je cherche moi aussi, en me tapant régulièrement la tête contre les murs, à régler proprement le problème du passage à la 1.9.

    Le truc c’est que, comme tout le monde, j’ai d’abord été obligé de passer la durée du cache à zéro : 0*3600

    Mais cela faisait recalculer chaque page à chaque visite. Et puis j’avais des plantages sur la prévisualisation des pages, quelquefois.

    Finalement, après une longue recherche et un coup de chance MONSTRUEUX, je suis tombé sur la solution, sur un forum perdu au milieu de nulle part qui traitait un problème de cache sous 1.9

    Je ne sais pas pourquoi ni comment cela fonctionne, mais par rapport à ce qui a déjà été dit ici, je rajoute la ligne magique : include_spip(’/inc/filtres’) ;

    Ce qui donne au total :

    // inclusion du script de gestion des layers de SPIP $flag_ecrire = false ; include ’ecrire/inc/layer.php’ ; include_spip(’/inc/filtres’) ;

    Là cela fonctionne à tous les niveaux, j’ai enfin pu repasser mon cache à #CACHE3600

    Bingo ! J’espère que cela fonctionnera pour vous aussi

    Fabrice (me contacter : http://gely.info/_F-Gely_.html)

    Voir en ligne : http://gely.info

  • Répondre à ce message

    23 octobre 2006 15:24 , par al

    Bonjour,

    Je n’arrive pas à bien executé le sript, j’ai recopier le ficier menu.html, sous spip 1.9.1, mais il me met des erreurs juste avant : Parse error : parse error in c :\program files\easyphp1-8\www\outil_catalogue\squelettes\menu.html on line 34. les balise php sont visiblement mal placé, et je ne sais pas ou les mettre, quelqu’un pourrait il donner le code de menu.html pour spip 1.9.1.

    PS : je doit créer un menu contextuel utilisant des tables externes à spip. Je doit avoir 4 onglets dans mon menu du même type que celui qui est présenté, et chaque onglet doit se mettre à jour en fonction du choix sur un onglet et ainsi de suite. Suivant que les choix faits, corresponde à un résultat dans la base de données.

    avez vous une idée ?

    D’autre part, j’ai remarqué qu’il était difficile de faire des requêtes évolués avec spip, et je pense me rabattre vers le SQL classique, qu’en penser vous ?, peut être y a t il un forum ouvert à ce sujet ? (je n’est pas pu récupérer des enregistrements (DISTINCT) dans une table doublons ne marche pas.

  • Répondre à ce message

    9 octobre 2006 20:52 , par albertville

    Bonjour, pour passer de spip 1.7.2 en 1.9.0 , j’ai modifié le fichier menu.html de la manière suivante :

    #CACHE {0*3600}

    <?php

    // inclusion du script de gestion des layers pour SPIP 1.9

    $flag_ecrire = false;

    include 'ecrire/inc/layer.php';

    include 'ecrire/inc/minipres.php' ;

    afficher_script_layer();
    ?>

    [(#REM) remplacement  du chemin 'img_pack' par 'ecrire/img_pack' ]

    echo '<img src="ecrire/img_pack/puce'.(#ID_RUBRIQUE == $actuelle ? 'on' : 'off').'.gif" />';

    Et cela fonctionne enfin !

    Bonne chance...

  • Répondre à ce message

    30 septembre 2006 13:51 , par coco

    Ah oui et j’ai oublié (peut-être que ça donnera des idées à quelqu’un) -> la dernière erreur est :

    Fatal error : Call to undefined function : afficher_script_layer() in /mnt/112/sdc/7/d/aae.infos/galerie/ecrire/public.php(24) : eval()’d code on line 30

    Donc en fait après avoir 15 fois le message d’erreur de la division par 0 ça se termine par celui là.

  • Répondre à ce message

    30 septembre 2006 13:47 , par coco

    Ben, c’est encore pareil que dans tous les messages ci-dessus (en tout cas je ne vois vraiment aucune différence), donc ça marche toujours pas :)

    Warning : Division by zero in /mnt/112/sdc/7/d/aae.infos/galerie/ecrire/public.php(24) : eval()’d code on line 26

    Warning : Division by zero in /mnt/112/sdc/7/d/aae.infos/galerie/ecrire/public.php(24) : eval()’d code on line 26

    et ça fait ça pour chaque ligne du menu dynamique. Sachant qu’il n’y a aucune raison pour qu’il y ait une histoire de division par zéro, je me demande si ça vient pas de chez Free...

    Bref, dommage que ça ne marche pas sous la 1.9 :(

  • Répondre à ce message

    27 septembre 2006 18:29 , par vincseize

    CORRECTION ET PRECISION  !!! attention à la syntaxe et erreur de frappe (guillemets, espaces, etc.) ou aux copier-coller les gars !

    Après être devenu fou pendant un quart d’heure, Chez moi c’est cela qui marche :

    /////en première ligne de menu.html

    #CACHE0*3600

    ///puis au niveau de :

    // inclusion du script de gestion des layers de SPIP

    $flag_ecrire = false ;

    include_spip(’ecrire/inc/layer’) ;

    include_spip(’ecrire/inc/minipres’) ;

    afficher_script_layer() ;

  • Répondre à ce message

    20 septembre 2006 14:59 , par arhtur

    Bonjour, Je suis passé sous 1.9.1 depuis 1.8.2 et j’ai eu de grosses difficultées à faire marcher ce menu. J’ai finalement inséré ce code dans menu.html :

    $flag_ecrire = false;
    include 'ecrire/inc/layer.php';
    afficher_script_layer();

    et surtout ne pas oublier de mettre #CACHE{0*3600}

    J’espère que ca en aidera certains

    Arhtur

Pages 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |...

Répondre à cet article

Retour en haut de la page

Ça discute par ici

SPIP | Squelette | | Plan du site | Suivre la vie du site RSS 2.0