Recherche un tag/plugin/astuce/autre pour auto-générer un sommaire -
bess - 28/10/2011
Salut tout le monde, Je suis en train de m'arracher les cheveux sur la recherche du forum pour remettre la main sur un message d'un membre qui avait pondu un petit bout de code capable de parser le {content} d'un gabarit pour extraire les balises <h1><h2>....<h6>
et créer à la volée une table des matières (+ lien?).
un peu comme sur ce site (fait avec dokuwiki) :
http://www.furie.be/wiki/doku.php?id=downcnt
ça parle à quelqu'un ?
Recherche un tag/plugin/astuce/autre pour auto-générer un sommaire -
bess - 28/10/2011
comme à mon habitude, la création du topic provoque l'apparition de la solution comme cela d'un coup ....
http://wiki.cmsmadesimple.org/index.php/Share_your_tags_here#table_of_contents
je vous dit ce que ça donne
Recherche un tag/plugin/astuce/autre pour auto-générer un sommaire -
bess - 28/10/2011
Pas satisfait du tag j'ai commencé à coder le mien que je vous laisse à disposition.
le principe : je récupère toutes les balises <hn>blabla</hn> avec N compris entre 1 et 6, il faut impérativement qu'elles ne soient pas encombrée de quoi que ce soit : id, class, js pour être prises en compte
code valable :
<h2>blabla</h2>
code pas valable :
<h2 class='sous_titre'>blabla</h2>
code pas valable
<H2>blabla</H2>
Je récupère donc les différentes balises et génère un sommaire hiérarchisé avec des listes ul/li imbriquées pour respecter la hiérarchie.
Deux appels possibles :
{table_of_contents content="$content" action='sommaire'}
{table_of_contents content="$content"}
Le premier génère un sommaire, le second affiche votre {content} habituel en prenant soit d'effectuer 2/3 modif sur les balises Hn pour permettre aux liens du sommaires de pointer dessus (système d'ancres)
Le code pourrait être revu pour les besoins de chacun et clairement il n'est pas optimisé au mieux.. mais ça fonctionne.
Dans une UDT nommée table_of_contents claquer ce code
Code :
$text = $params['content'];
$idPattern = 'anchor_';
$i = 0;
$resultats = array();
if(isset($params['action']) && $params['action'] == "sommaire")
{
preg_match_all('#<h([1-6])[ ]*>([^<]*)</h[1-6]>#' , $text, $resultats);
$previous = 0;
$sommaire = "";
$niveau = 0;
$liopen = false;
foreach($resultats[1] as $resultat)
{
// Si on descend d'un cran)
if($previous < $resultat)
{
$sommaire .= '<ul>';
$niveau++;
} else if($previous > $resultat)
{
$sommaire .= '</ul>';
$sommaire .= '</li>';
$niveau--;
$liopen=false;
} else
{
if($liopen)
{
$sommaire .= '</li>';
$liopen=false;
}
}
$sommaire .= '<li><a href="'.$_SERVER['REQUEST_URI'].'#'.$idPattern.$i.'" >'.$resultats[2][$i].'</a>';
$previous = $resultat;
$liopen = true;
$i++;
}
if($liopen)
$sommaire .= '</li>';
while($niveau > 0)
{
$sommaire .= '</ul>';
if($niveau > 1)
$sommaire .= '</li>';
$niveau--;
}
return $sommaire;
} else
{
$search = array('<pre>', '<code>');
$replace = array('<pre class="brush: php">', '<code class="exec">');
//On ajoute les classes aux balises
$text = str_replace ($search , $replace , $text);
$resultats_ids = array();
preg_match_all('#<h([1-6])[ ]*>([^<]*)</h[1-6]>#' , $text, $resultats);
foreach($resultats[1] as $resultat)
{
$resultats_ids[] = '<h'.$resultat.' id="'.$idPattern.$i.'">'.$resultats[2][$i].'</h'.$resultat.'>';
$i++;
}
$text = str_replace ($resultats[0], $resultats_ids , $text);
return $text;
}
Vous pouvez retrouver le rendu sur cette page :
http://mmmfs.furie.be/fr/exercices/exo-02-entite
Recherche un tag/plugin/astuce/autre pour auto-générer un sommaire -
jissey - 28/10/2011
tiens tiens!
dans le wiki, ça serait pas mal ça, non?
Recherche un tag/plugin/astuce/autre pour auto-générer un sommaire -
bess - 28/10/2011
ouais mais j'ai pas assez testé le code et pour exemple je viens juste de rendre mon code valide Xhtml sur mon site d'exemple (2h que je suis dessus) et je n'ai pourtant que 2 niveaux de profondeur de géré.
C'est assez galère de pondre un algo capable de descendre et remonter les niveaux en ouvrant et fermant les balises <ul><li> là ou il faut :/
J'ai modifié le code dans le premier post
Recherche un tag/plugin/astuce/autre pour auto-générer un sommaire -
Jean le Chauve - 05/03/2013
Bravo Bess
Autrement, il y a un tuto JQuery
sur le site du zéro
Recherche un tag/plugin/astuce/autre pour auto-générer un sommaire -
jissey - 05/03/2013
Comme quoi, CMSMS mène à tout
Recherche un tag/plugin/astuce/autre pour auto-générer un sommaire -
boullu - 05/03/2013
bess a écrit :Vous pouvez retrouver le rendu sur cette page : http://mmmfs.furie.be/fr/exercices/exo-02-entite
oups ! => Syntax Error in template "747f77658f14250b2feee72c1351f3808db013b8" on line 5 "{Exo02Entite exo=1}" unknown tag "Exo02Entite"
Recherche un tag/plugin/astuce/autre pour auto-générer un sommaire -
bess - 05/03/2013
ouais je sais pas si vous avez remarqué mais mon post date de Octobre 2011 ^^ alors oui, le site d'exemple est un peu en carafe depuis :/