We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 2327
    • 214 Posts
    Merci Soda, mais si je dis pas de bétise, WF ne génère pas de menu à partir de la structure d’un Doc -H1,H2....mais de la structure, l’arborescence, des doc eux-mêmes.

    Me tromp’che...?
      • 27889
      • 415 Posts
      Bon on va mettre ça sur le compte du manque de sommeil,

      je viens de modifier le snippet pour me faire pardonner,
      il affiche une liste des titres les niveaux désirés [123] pour h1,h2,h3 , pour l’affichage c’est une simple liste ul/li, mais ont peut mettre en forme grace aux classes css : hlevel1 pour h1, hlevel2 pour h2 ...
      J’ai fait ça vite fait, alors il peut subister des erreurs.

      Enlever les balises <?php et ?> avant de sauvegarder le plugin.
      <?php
      // ***********************************************************************
      // * SOMMAIRE (automatic toc)  by Soda     *
      // * http://www.modxcms.com/automatic-toc-679.html     *
      // ***********************************************************************
      // * for english support mail to [email protected]  or post in:       *
      // * support: http://modxcms.com/forums/index.php?topic=5675       *
      // ***********************************************************************
      // * Ce plugin remplace les pages comportant <!--sommaire-->       *
      // * par un sommaire avec les liens vers les titres    *
      // * Il ajoute devant chaque titre une barre de navigation dans les pages*
      // * comportant <!--navbar-->        *
      // *               *
      // * for english support [email protected]          *
      // * version:0.29 - license:like MODx      *
      // ***********************************************************************
      // * Remarque, bug, remerciement, don ;)  : [email protected]   *
      // * ! Vos titre de document ne doivent pas avoir d'attribut,      *
      // *   juste <h2>, pas <h2 style="jhhjh">        *
      // * ou alors, il faut modifier le masque de recherche :     *
      // *('/(<h['.$titre_a_chercher.']>)(.+?)(<\/h['.$titre_a_chercher.']>)/sim');
      // ***********************************************************************
      // * Utilisation:        *
      // * Put an id in your body: replace <body> with <body id="dpsite"> in   *
      // *    your template          *
      // * Administration - Ressources - Gestion des ressources    *
      // *    nouveau plugin         *
      // *    dans "événements système, cocher OnWebPagePrerender  *
      // *    dans général , entrez un nom, pourquoi pas 'sommaire'      *
      // *    dans code source coller cette ce fichier       *
      // * Par défaut tous les titres h2 seront inclus dans le sommaire avec une barre de navigation devant chaque h2
      // * Usage : placer <!--sommaire--> (tel quel !) là ou le sommaire doit être inséré dans votre page ou votre template(pour toutes les pages auxquelles il est li
      // *  Pour avoir un sommaire sur toute les pages insérez <!--sommaire--> dans votre template
      // * Usage : placer <!--navbar--> (tel quel !) pour avoir une barre de navigation insérée avant chaque titre (sauf le premier).
      // *  Pour avoir la barre de navigation sur toute les pages insérez <!--navbar--> dans votre template
      // *   (eventuellement) :Modifier le niveau de titre à inclure dans le sommaire (par défaut  <h2>) modifier $titre_a_chercher=2, 3 pour h3 ...
      // *   (eventuellement) :le sommaire utilise une liste ul, vous pouvez spécifier ici une classe pour pouvoir modifier le style dans votre css par défaut <ul class="plan">
      // *   (eventuellement) :vous pouvez modifier la barre de navigation (afin de mettre vos images par ex) en modifiant $navbar
      // *      vous pouvez profiter des classes de la barre de navigation (iconeprec-iconehaut-iconeaccueil)pour affecter une image: ex:
      // * a.iconeprec {padding:33px 7px 2px 7px; background: transparent url(/images/page_precedente.gif) top left no-repeat;}
      // ***********************************************************************
      // * Need scriptaculous for scroll effect (in the <head></head>)   *
      // *  <script type="text/javascript" src="js/prototype.js"></script>     *
      // *  <script type="text/javascript" src="js/scriptaculous.js"></script> * 
      // ***********************************************************************
      // * Variables           *
      // ***********************************************************************
      // * $body_id    - Id of the body, default 'dpsite'
      // * $titre_a_chercher - Niveau  des titre pris en compte pour créer le sommaire 2 pour h2, 3 pour h3 defaut:'2'
      // * $pied_sommaire    - Pied du sommaire (html) apparaissant après le sommaire defaut:'2'
      // * $classe_ul  - Classe pour le sommaire defaut:'plan'
      // * $label_prec - Nom du lien pour la page précédente defaut:'Préc'
      // * $title_prec - Titre du lien pour la page précédente defaut:'Retour à votre page précédente.'
      // * $label_top  - Nom du lien pour le haut de page. defaut:'Haut'
      // * $title_top  - Titre du lien pour le haut de page. defaut:'Aller en haut de page'
      // * $label_home - Nom du lien pour la page accueil. defaut:'Accueil'
      // * $title_home - Titre du lien pour la page accueil. defaut:'Aller à la page d'accueil'
      // * $navbar_classe    - Classe pour la barre de navigation defaut:'navibar'
      // ***********************************************************************
      // * TODO: Remove bugs         *
      // ***********************************************************************
      
      global $tab_titres, $navbar, $premier, $n;
      
      
      // ***********************************************************************
      // * variables pour le sommaire      *
      // ***********************************************************************
      //pour h2, 3 pour h3 ... Niveau  des titre pris en compte pour créer le sommaire
      //Level of link for the toc
      $titre_a_chercher ='[1234]';
      
      // titre (html ) apparaissant avant le sommaire 
      $titre_sommaire= "\n<h2>Sommaire</h2>\n";
      
      // pied du sommaire (html) apparaissant après le sommaire
      // toc footer content
      $pied_sommaire="<br />";
      
      // le sommaire utilise une liste ul, vous pouvez spécifier ici une classe
      // pour pouvoir modifier le style dans votre css. Par défaut <ul class="plan">
      $classe_ul ='plan';
      
      // ***********************************************************************
      // * barre de navigation       *
      // ***********************************************************************
      // Body id
      $body_id='#dpsite';
      // Classe for navbar
      $navbar_classe="navibar";
      // Link name for back page
      $label_prec="Préc.";
      // Title link for back page.
      $title_prec="Retour à votre page précédente.";
      // Name link for top.
      $label_top="Haut";
      // Title link for top.
      $title_top="Allez en haut de la page.";
      // Name link for home page.
      $label_home="Accueil";
      // Title link for home page
      $title_home="Aller à la page Accueil.";
      
      //************* End of  configuration variable
      $navbar="<div class=\"".$navbar_classe."\">\n";
      // bug ? $_SERVER['HTTP_REFERER'] contient http//mondomaine.com (sans ':') envoyer moi vos problèmes avec ce lien, que je puisse faire une modif pour tous
      $back=(isset($_SERVER['HTTP_REFERER']))?$_SERVER['HTTP_REFERER']:$modx->config['site_url'];
      $navbar.="  <a class=\"iconeprec\" href=\"$back\" title=\"$title_prec\">$label_prec</a>\n";
      //$navbar.="  <a class=\"iconehaut\" href=\"".$modx->make_url($modx->documentObject['id']."#dpsite\" title=\"$title_top\">$label_top</a>\n";
      $navbar.="  <a class=\"iconehaut\" href=\"".$_SERVER['REQUEST_URI']."$body_id\" onclick=\"new Effect.ScrollTo('dpsite',{duration:1});return false;\" title=\"$title_top\">$label_top</a>\n";
      $navbar.="  <a class=\"iconeaccueil\" href=\"".$modx->config['site_url']."\" title=\"$title_home\">$label_home</a>\n";
      $navbar.="<!-- fin navibar --></div>\n";
      
      // ***********************************************************************
      // * fin de la configuration, début du traitement      *
      // ***********************************************************************
      $premier=true;
      $insert_sommaire=false;
      
      $all_lines = $modx->documentOutput;
      // strpos plus rapide que strstr//=strstr($all_lines, "<!--sommaire");
       $search = "/<!--sommaire((-->)|(\|([^\|]+)))/";
       preg_match($search, $all_lines, $matches);
       $is_sommaire=$matches[0];
      // $titre_sommaire=$matches[4];
       //$a=($is_sommaire)?"y'a un sommaire\n":"y'a pas de sommaire\n"; //$a.=($titre_sommaire)?"y'a un titre\n":"y'a pas de titre\n";
      $insert_sommaire=($is_sommaire)?true:false;
      
      
      if (!strstr($all_lines, "<!--navbar-->")) {$navbar='';}
          $tab_titres =array(); // tableau contenant les titres et les noms d'ancre
          $search= array ('/[^|](<h('.$titre_a_chercher.')>)(.+?)(<\/h'.$titre_a_chercher.'>)/sim');
          $all_lines_replaced=preg_replace_callback($search, 'rep', $all_lines);  //replace les titre <h2> </h2> par <h2 id=""></h2>
      
          if  (count($tab_titres)>=2 ) { //s'il existe au min 2 titres et on trouve <!--sommaire-->
            
            $sommaire .= "$titre_sommaire\n<ul class=\"$classe_ul\">\n";
            foreach ($tab_titres as  $nom_titre_h2 =>$ancre_h2 )
            {
        $sommaire.= "\n <li class=\"".$tab_titres[$nom_titre_h2]['level']."\"><a href=\"".$_SERVER['REQUEST_URI']."#". $tab_titres[$nom_titre_h2]['ancre']."\" onclick=\"new Effect.ScrollTo('$ancre_h2',{duration:1});return false;\">$nom_titre_h2</a></li>";  // $modx->documentObject['objectName']; //href=\"[(base_url)][*alias*]#dpsite\"//REQUEST_URI
            }
            $sommaire.= "\n</ul>\n$pied_sommaire\n<!--";
            if ($insert_sommaire==true){
        $all_lines_replaced=preg_replace ( array ('/<\!--sommaire/m'),array($sommaire),$all_lines_replaced); //insere le sommaire
            }   
            $modx->documentOutput=$all_lines_replaced; // renvoie la page modifiée
          
        }
          //  }
          function rep($matches)
          {
      
      //echo '<h2>$matches: </h2><pre>';echo print_r($matches);echo'</pre>';
            global $tab_titres, $navbar,$premier;
            $start_tag=$matches[1];  //<h2>
            $h=trim($matches[3]);    //titre dans les balises <h2> </h2>
      	  $end_tag=$matches[4];    //</h2>
      	  $level=$matches[2];    //2
            // création de l'ancre:
            $nom_ancre = html_entity_decode($h);
            //$nom_ancre=substr($h2, 0, 15); //longueur de nom_ancre maxi
            // todo: rajouter les autres caractères et les '&char;'
            $search=array ('/\s+/','/é/','/è/','/ê/','/à/','/àƒÂ´/','/àƒÂ®/','/àƒÂ»/','/àƒÂ¹/','/ç/','/\//','/</','/>/','/\&/','/\?/','/\*/','/\-/','/\+/','/\./','/\,/','/\'/');
            $replace=array('_',     'e' ,'e'  , 'e'  ,'a'  ,'o',  'i',  'u',  'u',  'c','');
            $nom_ancre=preg_replace ($search, $replace,$nom_ancre);// vire les accents et divers caractères
            $nom_ancre=strtolower($nom_ancre); //$nom_ancre=strtolower(rawurlencode($nom_ancre));
            $tab_titres[$h]['ancre']=$nom_ancre;  // sauvegarde du titre et de l'ancre pour le sommaire
            $tab_titres[$h]['level']='hlevel'.$level;  // sauvegarde du niveau du titre
            $start_tag = substr($start_tag, 0, -1);  // vire le > de <h_>
            if ($premier) {$str="\n$start_tag id=\"$nom_ancre\">$h$end_tag\n";} else  { $str=$navbar."\n$start_tag id=\"$nom_ancre\">$h$end_tag\n";}
            $premier=false;
            return $str;
          }
      
      ?>
      
        MODx Sites & Prestations: http://dp-site.fr [Last MODx Site]
        MODx Repository: [HOME] [MetaTagsExtra] / Current Dev: [xFDM]
        • 2327
        • 214 Posts
        Bonsoir,

        Désolé de réveiller ce vieux topic. Je cherche aujourd’hui a générer un plan de site incluant les Hn de chacune de ses pages...une combinaison de WayFinder et Autotoc en somme...

        D’où ma question : puisque WF est capable de générer des listes incluant les variables des pages (intro, description....) ou autres TV, comment inclure les mini-sommaires générés par autotoc dans une TV du doc, de façon à les récupérer dans WF....

        J’espère n’être pas trop confus...

        Merci.