Super contrib ! Merci noplay. Toutefois il implique que tous les articles qui ont du texte entre les 3 accolades {{{ ajoute automatiquement le menu.
J’avais donc besoin d’afficher le sommaire que sur certains articles.
J’ai donc créé une boucle qui me permette d’afficher le sommaire uniquement lorsque le mot clé "ancres-texte" est attaché à l’article :
<BOUCLE_ancres(MOTS){id_article}{titre = ancres-texte}>
[(#TEXTE*|sommaire_article|propre)]
<hr>
<br><br>
</BOUCLE_ancres>
[(#TEXTE*|sommaire_ancre|propre)]
...
Malheureusement, et ne sais pas pourquoi, ca ne marche pas ! :-(
J’ai tout essayé mais impossible de faire apparaitre/disparaitre le menu avec l’utilisation de mots clés.
Je propose donc une solution plus ou moins sympas.
La solution et bien en effet c’est sebold qui l’a donnée ci-dessous et que je remercie infiniment, avec la possibilité d’utiliser ses propres tags et ne pas lier le sommaire aux 3 accolades.
Cela m’a permis de créer des tags personnalisés. Tant qu’ils ne sont pas utilisés le menu n’apparait pas ! J’ai donc créé des tags personnalisés <anc></anc>.
J’ai utilisé ma boucle "Mots" avec le mot clé "ancres-texte" pour afficher la décoration du sommaire.
Résultat dans le squelette de l’article :
<!-- affichage du sommaire si tag "anc" utilisé -->
[(#TEXTE*|sommaire_article{"<anc>","</anc>"}|propre)]
<!-- boucle affichant la décoration et espace pour le sommaire -->
<BOUCLE_ancres(MOTS){id_article}{titre = ancres-texte}>
<hr>
<br><br>
</BOUCLE_ancres>
<!-- texte de l'article -->
[(#TEXTE*|liens_ouvrants{"<anc>","</anc>"}|sommaire_ancre|propre)]
Ainsi, le tag anc active le sommaire et le mot clé "ancres-texte" rattaché à l’article me permet de "décorer" l’article. Si l’article n’utilise pas les tag "anc" et n’a pas le mot clé attaché, il se présentera comme un article normal.
J’ai également profité de la contribution de ovto pour faire des liens de retour au sommaire sur les titres en adaptant le script pour mes_fonctions en conséquence :
/*
* +----------------------------------+
* Nom du Filtre : Sommaire de l'article
* +----------------------------------+
* Date : dimanche 9 février 2003
* Auteur : Noplay (noplay@altern.org)
* +-------------------------------------+
* Fonctions de ce filtre :
* Cette modification permet d'afficher le sommaire de son article
* généré dynamiquement à partir du texte de l'article. Vous pouvez naviguer
* dans l'article en cliquant sur les titres du sommaire.
*
* Tous ce qui ce trouve entre {{{ et }}} est considéré comme un titre à ajouter au sommaire de l'article.
* +-------------------------------------+
*
* Pour toute suggestion, remarque, proposition d'ajout
* reportez-vous au forum de l'article :
* http://www.uzine.net/spip_contrib/article.php3?id_article=76
*/
function sommaire_article($texte, $beginPattern="\{\{\{", $endPattern="\}\}\}"){
$pattern = "|" . $beginPattern . "(.*)" . $endPattern . "|U";
preg_match_all($pattern, $texte, $regs);
$texte="";
$nb=1;
for($j=0;$j<count($regs[1]);$j++){
$texte=$texte."<BR> <li><a name=\"so_".$nb."\" a href=\"#sommaire_".$nb."\">".$regs[1][$j]."</a></li>";
$nb++;
}
return $texte;
}
function sommaire_ancre($texte, $beginPattern="\{\{\{", $endPattern="\}\}\}"){
$pattern = "|" . $beginPattern . "(.*)" . $endPattern . "|U";
$texte = preg_replace($pattern, "<a href=\"#so_#NB_TITRE_DE_MON_ARTICLE_renvoi#\" name=\"sommaire_#NB_TITRE_DE_MON_ARTICLE#\">$0</a>", $texte);
$array = explode("#NB_TITRE_DE_MON_ARTICLE#" , $texte);
$res =count($array);
$i =1;
$texte=$array[0];
while($i<$res){
$texte=$texte.$i.$array[$i];
$i++;
}
$array = explode("#NB_TITRE_DE_MON_ARTICLE_renvoi#" , $texte);
$res =count($array);
$i =1;
$texte=$array[0];
while($i<$res)
{
$texte=$texte.$i.$array[$i];
$i++;
}
return $texte;
}
//Fin filtre sommaire de l'article
?>
Répondre à ce message