Sommaire de l’article

Cette modification permet d’afficher le sommaire de son article généré dynamiquement à partir du texte de l’article.

Ce filtre 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.

Démo

Tous ce qui se trouve entre {{{ et }}} est considéré comme un titre à ajouter au sommaire de l’article.

Installation

dans mes_fonctions.php3 ajoutez:

/*
 *   +----------------------------------+
 *    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)
{
	
	preg_match_all("|\{\{\{(.*)\}\}\}|U", $texte, $regs);
	
	$texte="";
	
	$nb=1;
	
	for($j=0;$j<count($regs[1]);$j++)
	{
    	$texte=$texte."<a href=\"#sommaire_".$nb."\">".$regs[1][$j]."</a><br>";
		$nb++;
    }
	return $texte;
}

function sommaire_ancre($texte)
{
	$texte = preg_replace("|\{\{\{(.*)\}\}\}|U","<a 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++;
	}
	
	return $texte;
}
//Fin filtre sommaire de l'article

et dans votre squelette vous ajoutez:
-  [(#TEXTE*|sommaire_article|propre)] pour afficher le sommaire de l’article
-  [(#TEXTE*|sommaire_ancre|propre)] pour afficher l’article.

Attention : ce filtre utilise la fonction preg_match_all qui necessite une version de PHP3 superieure a PHP 3.0.9

Discussion

19 discussions

  • 3

    Bonjour,

    J’ai cherché un peu sur le site de SPIP ainsi que sur le net mais je n’ai pas trouvé réponse à ma question :

    J’ai voulu utiliser ce filtre mais il ne marchait pas. Au bout d’un moment je me suis demandé à quel texte s’appliquait ce filtre et j’ai essayé la chose suivante :
    remplacer l’expression régulière "|\{\{\{(.*)\}\}\}|U" par "|<h3 class=\"spip\">(.*)</h3>|U". Et ça marche !!

    Il semble donc que mon filtre soit appliqué après la transofrmation en html du texte de l’article. Ca m’embête un peu car ça crée un dépendance sur le fait qu’on utilise une balise h3 pour les titres.

    Ma question est la suivante : Est-ce un nouveau comportement de SPIP ou y a-t-il un endroit où on peut spécifier à quel moment le filtre s’applique ?

    Merci,

    ben

    • Noplay

      A tu d’autre filtres d’installés?

    • Je ne comprends pas bien ta question. Je n’applique que ce filtre au TEXTE.

      Je ne pense pas que nous ayons changé beaucoup de choses à l’installation par défaut de SPIP, car nous débutons avec SPIP et commençons juste la construction de notre nouveau site avec.

    • Bah comme sa je vois pas le probleme, chez moi sa marche avec la derniere version de SPIP.

    Reply to this message

  • 1

    dans l’interface d’admin les accolades sont bien interprétées selon le cas par du gras, des intertitres..., mais une fois affichées sur mon site je vois les accolades ?
    que se passe-t-il d’après vous ?

    je dois ajouter un filtre pour prendre en compte l’interprétation des accolades ?

    merci

    • Bonjour.

      Je peux me tromper, mais essaye de rajouter le filtre |typo aux différentes balises, et ça devrait marcher.

      A plus !

      PS: dis-moi si ça marche..

    Reply to this message

  • 1

    script très utile mais quand la page est un peu longue, on souhaiterait avoir un symbole haut de page à coté du titre pour remonter au sommaire.
    ne connaissant pas PHP, une aide serait la bienvenue
    merci d’avance

    • bah c’est du HTML pur, il faut mettre une ancre au niveau du sommaire

    Reply to this message

  • J’ai proposé un article où J’ai couplé les scripts “sommaire” et “découper un article en plusieurs pages”.

    Il est en attente de validation

    Reply to this message

  • 2

    Ce filtre est super mais je n’arrive pas à le rendre compatible avec le filtre qui permet de couper en page un article. Les deux compatibles rendraient les pages très dynamiques. Comment peut-on faire ?

    • effectivement cela pourrait être intérressant

      donc je te donne une piste de réflexion.

      Seul la fonction sommaire article est à garder et à modfier (pour utiliser une url au lieu d’une ancre)

      après faut utiliser le filtre pour découper en plusieurs pages afin de donner un id à chaque page

      (aie je suis pas très clair)

    • tu n’es pas clair!

    Reply to this message

  • vincent

    Salut,

    J’ai vu qu’il existe une fonction SOMMAIRE affichant le sommaire d’un article.

    Celle-ci combinée à ta fonction de découpage d’article permettrait de présenter dans une liste les différents points de l’article qui seraient aussi les différentes pages.

    Comment peut-on modifier le filtre pour qu’à chaque titre affiché dans le sommaire corresponde à 1 page de l’article ?

    Ainsi cela comblerait un manque de SPIP qui est justement le type de document “dossier”.

    Quelqu’un a déjà bossé ou bosse dessus ?

    Et d’ailleurs est-ce que le rattachement d’articles est prévu dans les prochaines versions de SPIP ?
    Le rattachement consisterait ainsi à regrouper des articles distincts afin de les présenter comme un dossier.

    Merci pour vos réponses :)

    Reply to this message

  • Peut-on m’indiquer des liens de pages qui utilisent ’sommaire de l’article".Merci.

    Reply to this message

  • 2

    Super ce filtre. Je l’ai adapté à mes besoins : je n’utilise pas les raccourcis syntaxique de spip. J’écris mes pages html à part, et je les place dans spip par copier - coller. Donc dans mon cas, ce qui marque les paragraphes, c’est des tags <H2>
    J’ai donc modifié sommaire_article et sommaire_ancre pour faire un “filtre à plusieurs variables”, les variables étant ce qui encadre un titre de paragraphe.

    &bra;

    L’utilisation se fait alors comme ça :

    [(#TEXTE*|sommaire_article“<H2>”,“</H2>”|propre)]
    [(#TEXTE*|sommaire_ancre“<H2>”,“</H2>”|propre)]

    (il manque des accolades, mangées par le système de messagerie).

    En mettant les accolades comme valeurs par défaut aux fonctions, l’utilisation reste la même pour qui se sert des raccourcis syntaxiques de spip.

    J’aurais bien collé le code des fonctions ici, mais ce foutu système de messagerie génère du texte inexploitable. Je peux l’envoyer par mail à qui le veut.

    • tu dis : J’aurais bien collé le code des fonctions ici, mais ce foutu système de messagerie génère du texte inexploitable.

      Quand tu ecrit du code il suffit de l’entourer des balises CODE et /CODE .
      Par exemple :
      <code>{{{blabla}}}

      ou alors aussi les balises cadre :

      <code><code>{{{blabla}}}</code>
    • C’était donc ça...

      Merci pour l’info.

      Dans le squelette, ça donne :

      [(#TEXTE*|sommaire_article{"<H2>","</H2>"}|propre)]
      [(#TEXTE*|sommaire_ancre{"<H2>","</H2>"}|propre)]

      Et le code à mettre dans mes_fonctions.php3 :

      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>&nbsp;&nbsp;&nbsp;- <a href=\"#sommaire_".$nb."\">".$regs[1][$j]."</a>";
      		$nb++;
          }
      	return $texte;
      }
      
      function sommaire_ancre($texte, $beginPattern="\{\{\{", $endPattern="\}\}\}"){
        $pattern = "|" . $beginPattern . "(.*)" . $endPattern . "|U";
      	$texte = preg_replace($pattern, "<a 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++;
      	}
      	return $texte;
      }
      //Fin filtre sommaire de l'article

    Reply to this message

  • 1

    [(#TEXTE*|sommaire_article|propre)]

    [(#TEXTE*|sommaire_ancre|propre)]

    Je n’est pas compris comment on l’installe dans le squelette. Doit-on mettre les deux ? et doit-on écraser #TEXTE par #TEXTE* dans la boucle article ?

    • oui oui il te faut les deux car l’un affiche le sommaire et l’autre affiche le texte en lui même.

      et il faut effectivement dégager #TEXTE

    Reply to this message

Add a comment

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite / PostgreSQL
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparait.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Who are you?
[Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom