MiniGriSpip

Petit site de test et de démonstration du squelette MiniGriSpip 1.6...
Accueil du site > Autres projets > Archives > Filtre Sommaire Tableau 1.0
  • Calendrier
«août 2006»
lun.mar.mer.jeu.ven.sam.dim.
123456
78910111213
14151617181920
21222324252627
28293031

Aujourd'hui lundi 18 décembre 2017

 2006   2007   2008   2011 
  • Infos
  • Dernière modification :
    Le mercredi 14 décembre 2011
  • Statistiques contenus :
    Articles : 24 -  Brèves : 4
    Commentaires : 212
    Sites : 3 -  Auteurs : 2
  • Statistiques visites :
    Aujourd'hui : 0 -  Total : 194147
  • Article

Filtre Sommaire Tableau 1.0

Petit filtre pour générer un sommaire dans les articles...

Le jeudi 31 août 2006, par FredoMkb

Souvent, lorsqu’on rédige un long texte, on souhaiterais pouvoir créer un système de navigation interne à l’article, afin de faciliter l’accès aux différents chapitres qui le composent. Dans ce cas, la fabrication d’une navigation sous forme de sommaire est une solution toute indiquée.

Il est possible de construire ce sommaire manuellement, grâce au système des ancres et liens gérés par Spip, mais la tâche s’avère souvent assez pénible, sans parler des erreurs toujours possibles, alors voici un nouveau petit filtre, baptisé "Sommaire Tableau", qui, comme son nom l’indique, sert à générer des sommaires automatiquement, sous forme de tableau, mais pas seulement...

Sommaire

Présentation

Comme je le signalais dans l’introduction, on peut avoir besoin de fabriquer un petit système de navigation à l’intérieur d’un article, surtout si celui-ci est long est structuré en chapitres.

Un sommaire, ou table de matières, est la solution qu’on utilise communément, dans l’édition traditionnelle, pour aider le lecteur à accéder rapidement aux contenus de l’ouvrage qui lui semblent les plus pertinents.

De la même manière, en matière de publication internet, la mise en ligne des longs textes ne devrait pas échapper à cette judicieuse pratique.

Les concepteurs de SPIP ont pensé qu’il serait parfois utile de pouvoir faire des liens internes dans les articles et dans le site, en fournissant les outils syntaxiques nécessaires pour faciliter cette tâche lors de la rédaction d’un texte, notamment par l’insertion des ancres nommées.

Seulement, vous vous en doutez, fabriquer manuellement un sommaire nécessite un certain nombre de manipulations, qui peuvent être fort fastidieuses à la longue... et c’est là qu’une solution automatisant cette opération serait un moyen de d’économiser du temps (et quelques énervements en moins au passage :-), d’où l’idée de développer ce filtre...

Bien sûr, avant de me lancer dans cette réalisation, j’ai un peu regardé si d’autres solutions existaient déjà, et si elles convenaient à l’utilisation que j’imaginais...

J’ai trouvé alors deux contributions fort intéressantes :

- Sommaire d’un article, proposée par Noplay.

- Découper un article en plusieurs pages et lui ajouter un sommaire, proposée également par Noplay conjointement avec A. Perard.

Alors, pour être honnête, je n’ai testé que la première de ces deux contributions, et ça fonctionne plutôt bien... mais, ayant une autre idée en tête, je me suis dis qu’elle pouvait éventuellement intéresser d’autres que moi.

Mon idée était de pouvoir réaliser le sommaire sous forme de tableau, car je trouvais que visuellement ça avait l’avantage de créer une rupture avec le reste du contenu "normal" d’un article, rendant l’accès au sommaire plus évident et immédiat.

De plus, je voulais que le sommaire ne soit généré que si le rédacteur le souhaitait explicitement, de manière ponctuelle et non pas systématiquement, car certains articles, plus courts ou n’ayant pas nécessairement besoin d’une table de matières, ne méritent pas toujours d’avoir un sommaire de navigation.

Enfin, toujours dans le but de faciliter la navigation au sein de l’article, je voulais que tous les intertitres reçoivent un lien de retour vers le sommaire de navigation.

Pour la petite histoire, la conception de ce filtre entre dans le cadre plus général du développement du squelette MiniGriSpip, sur lequel je travaille encore afin de l’améliorer, tant au niveau du code que des fonctionnalités proposés.

Voici donc les explications d’installation et d’utilisation de ce nouveau filtre "Sommaire Tableau", qui est en sa toute première version...

Bonne découverte et utilisation... n’hésitez pas à me faire part de vos remarques et suggestions dans le forum de cet article... :-)

Installation

Ce filtre est fourni sous la forme d’un fichier nommé "somm_table.php", qu’il faut dupliquer ou déplacer dans votre dossier "squelettes".

Ce filtre s’installe comme la plupart des autres, à savoir, par l’une des méthodes suivantes :

- Si votre squelette dispose d’un fichier nommé "mes_fonctions.php", éditez-le, puis insérez la ligne de code suivante en tête du fichier, juste après la balise qui débute le code Php <?php :

include("somm_table.php");

- Une autre possibilité consisterait à éditer les deux fichiers "mes_fonctions.php" et "somm_table.php", et par un simple copier/coller, insérer, à partir de ce dernier, l’ensemble du code de la fonction nommée "somm_table" dans le premier fichier, n’importe où entre les balises <?php et ?>, mais pas à l’intérieur du code d’une autre fonction existante.

- Enfin, si votre squelette ne dispose pas d’un fichier nommé "mes_fonctions.php", il suffit alors de renommer le fichier "somm_table.php" en "mes_fonctions.php".

Intégration

Ce filtre est spécialement dédié au traitement des textes des articles et brèves, même si ces dernières n’ont pas besoin, en principe, d’avoir un sommaire, l’intégration demeure identique, consistant donc à placer le filtre à l’intérieur des boucles correspondantes sur la balise "#TEXTE".

Par exemple, dans une boucle "(ARTICLES)", il faut placer ce filtre sur la balise "#TEXTE" de la manière suivante :

[(#TEXTE*|somm_table|propre)]

Important, notez la présence d’un astérisque "*" après la balise "#TEXTE", celui-ci est absolument nécessaire afin de pouvoir travailler sur le contenu brut de l’article, c’est à dire, sans les mises en forme propres à Spip.

De plus, vous remarquerez qu’un autre filtre, nommé "propre", se place juste après le filtre "somm_table", ceci est également absolument nécessaire afin que Spip puisse rétablir son propre formatage du contenu de l’article.

Donc, pour résumer, avec l’astérisque on inhibe le formatage de Spip afin de pouvoir lancer les opérations du filtre "Sommaire Tableau" sans dénaturer le contenu, et avec le filtre "propre" on rétabli les formatages de Spip.

Enfin, si jamais vous avez d’autres filtres a utiliser sur la même balise, comme par exemple le filtre qui sert à redimensionner les images contenues dans l’article, insérez alors de préférence le filtre "somm_table" en premier, comme suit :

[(#TEXTE*|somm_table|propre|reduire_image{400,0})]

Utilisation

Voici comment utiliser ce filtre dans le texte des articles et brèves...

Tout d’abord, il faut préciser que ce filtre génère un sommaire uniquement si le rédacteur de l’article le demande explicitement, il n’est donc pas nécessaire d’enlever le filtre des boucles Spip pour inhiber son action.

Pour demander au filtre de générer un sommaire, il suffit de créer un intertitre "Sommaire" dans le corps de l’article, de préférence au début du texte, dès lors, le filtre détectera sa présence et analysera l’ensemble du texte afin d’isoler tous les autres intertitres existants, ce qui lui servira pour fabriquer le sommaire de navigation, qui s’affichera ensuite juste en dessous de l’intertitre "Sommaire" (logique non ? :-)...

Si vous ne souhaitez pas de sommaire de navigation, il suffit de ne pas créer d’intertitre "Sommaire" dans votre article... c’est tout.

Enfin, si vous avez quand-même besoin d’inscrire un intertitre "Sommaire" dans votre article, mais sans vouloir pour autant générer un sommaire de navigation, vous n’avez qu’à terminer l’intertitre avec une espace, comme ceci "Sommaire ", du coup le filtre ne produira aucun effet.

Important, l’intertitre "Sommaire" qui déclenche la fabrication du sommaire de navigation, doit être écrit tel quel (peu importe la casse), sans être précédé ni suivi d’aucun autre caractère ou numéro, sans quoi le filtre ne produira aucun effet.

Affichage

Deux différents affichages du sommaire de navigation sont disponibles : tableau ou liste.

- Sommaire Tableau

Ce filtre propose donc, par défaut, la possibilité de générer un sommaire de navigation sous forme de tableau, juste en insérant un intertitre "Sommaire" dans le corps de votre article...

Le résultat sera comme celui de cette page par exemple, ou de cette capture d’écran tirée du site de démonstration du squelette MiniGriSpip :

Exemple de sommaire de navigation sous forme de tableau
PNG - 26.6 ko
Cliquez sur la vignette pour l’aggrandir

Évidemment, le sommaire de navigation que vous obtiendrez aura le même aspect et formatage que les tableaux de votre squelette... n’hésitez pas alors à modifier les feuilles de style concernées afin d’adapter et améliorer leur affichage.

- Sommaire Liste

Si la présentation sous forme de tableau ne convient pas vraiment au type de contenu traité dans votre site (textes universitaires, philosophiques, littéraires, religieux, etc.), le filtre autorise également de générer des sommaires de navigation sous forme de liste, plus discrets et peut-être d’avantage adaptés à l’esprit de votre site.

Pour générer une liste à la place d’un tableau, il suffit de terminer l’intertitre du sommaire avec un trait d’union (tiret simple), comme ceci "Sommaire-", ce qui produira un sommaire de ce type :

- Présentation
- Installation
- Intégration
- Utilisation
- etc.

Important, comme précisé précédament, tout autre caractère, hormis le trait d’union à la fin, autour de l’intertitre, même une simple espace, aurait pour effet d’inhiber la fabrication du sommaire de navigation, quelque soit le type choisi.

Personnalisation

Certains l’auront sans doute compris, ce filtre "Sommaire Tableau", particulièrement adapté pour des sites francophones, ou pour des articles rédigés dans notre belle langue, n’aura aucun effet dans le cadre d’une utilisation avec une autre langue que le français...

Et oui, étant donné que le terme par défaut, déclencheur de la fabrication du sommaire de navigation, est le mot "Sommaire", il devient difficile, voire absurde, de contraindre les rédacteurs polyglottes à utiliser toujours ce même mot dans tous leurs articles, quelque soit la langue utilisée...

Pour pallier à cet inconvénient, le filtre propose une option permettant de lui indiquer précisément quel est le mot qu’il doit considérer comme déclencheur de la fabrication du sommaire de navigation.

Ainsi, il est possible, très simplement, de l’intégrer dans un site multilingue, dès lors qu’on utilise des fichiers de localisation pour les textes reccurants ou ceux de l’interface du squelette.

Voici alors la procédure à suivre pour pouvoir utiliser un autre mot que "Sommaire", afin que le filtre soit toujours fonctionnel, quelque soit la langue utilisée.

- Il faut commencer par éditer le fichier de localisation nommé "local_fr.php" (s’il n’existe pas, il faudra le créer), et y ajouter une nouvelle définition, comme ceci par exemple : 'somm' => 'sommaire',. Il faut de préférence écrire le mot "sommaire" tout en minuscules.

- Puis, si votre site reçois des textes en anglais, il faut éditer le fichier de localisation correspondant (ou le créér à défaut), à savoir "local_en.php, puis y ajouter une nouvelle définition, en respectant la clé utilisée dans le fichier de localisation précédent, à savoir 'somm', par exemple : 'somm' => 'summary',.

- Si votre site accepte également des articles en espagnol, il faut alors éditer le fichier de localisation correspondant, c’est à dire "local_es.php (ou le créer à défaut), et y ajouter la définition qui va bien, par exemple : 'somm' => 'índice',, attention toutefois aux accents et aux encodages textes utilisés (Ascii, Unicode, etc.).

Puis, ainsi de suite avec les autres langues pratiquées dans votre site.

Maintenant, voici comment passer cette information au filtre, afin qu’il adapte son traitement en conséquence.

Au moment de l’intégration du filtre, dans les codes Html de vos pages "articles.html" et/ou "breve.html", il faudra ajouter un argument au filtre, qui correspond exactement à la balise 'somm' des textes localisés de notre exemple précédent, de la manière suivante :

[(#TEXTE*|somm_table{<:somm:>}|propre)]

Voilà, votre filtre "Sommaire Tableau" est prêt à fabriquer des beaux sommaires navigables dans l’ensemble de articles de votre site, quelque soit la langue utilisée, dès lors que sa définition existe dans un fichier de localisation correspondant.

Bien sûr, vous pouvez utiliser cette méthode pour changer d’intertitre déclencheur de la fabrication du sommaire de navigation, même si votre site n’est pas multilingue, et au lieu d’utiliser le mot "Sommaire" par défaut, vous pourriez lui préférer le terme "Table de matières", ou un autre, il suffit alors d’indiquer celui de votre choix dans l’argument du filtre, pour que celui-ci adapte son traitement en conséquence...

Codes

Important, pour éviter un problème d’affichage du code ci-dessous, les balises "code" et "cadre" ont été légèrment modifiés, par l’ajout des espaces autour des textes, mais vous devrez effacer ces espaces pour que le code fonctionne correctement. Ces balises se trouvent dans les deux instructions juste après le commentaire suivant : // On exclu les textes des codes et cadres.

Téléchargement

Filtre "Sommaire Tableau" à télélcharger
Zip - 3 ko
Cliquez sur l’icone pour le télécharger

Avertissement

Important, étant donné la méthode d’analyse du texte et la technique de fabrication du sommaire de navigation, ce filtre sera inopérant sur les articles directement rédigés en Html, en effet, seule la syntaxe typographique de Spip est supportée pour l’instant, et vous devrez inscrire vos intertitres entourés de 3 accolades "{{{Intertitre}}}" pour que le filtre puisse fonctionner correctement.

Il n’est pas prévu pour l’instant une version gérant la syntaxe Html, mais si plusieurs utilisateurs se manifestent avec cette requête, je pourrais alors étudier la réalisation d’une version compatible Html. N’hésitez pas à formuler vos suggestions dans le forum de cet article, merci.

Remerciements

Je tiens à remercier tous les participants et utilisateurs du squelette MiniGriSpip pour leurs interventions toujours constructives et pour l’accueil qu’ils ont su réserver à ce projet.

Je voudrais remercier aussi aux différents participants des forums ExpReg.com ainsi que PhpFrance pour leur aide inestimable.

Enfin, un grand merci à la communauté Spipienne pour leur esprit d’entraide permanent, et aux concepteur et développeurs de ce magnifique outil de publication qu’est Spip.

  • Commentaires : 9 (triés par date)
  • Le 7 septembre 2006 13:05, par Yann974

    Merci Fredo pour la solution au problème [c.f. forum de l’article sur Spip-Contrib] (que j’aurais pu trouver moi-même ... fainéant le Yann974 des fois), qui fonctionne à merveille. Mais voilà, problème déjà présent que j’avais oublié de mentionner, le titre "sommaire" est affublé d’un lien vide des plus gênant. Comme si le filtre parsait les intertitres en prenant en compte "Sommaire".

    J’ajoute qu’il n’est pas possible de numéroter les intertitres du type "1. Intertitre1","2. Intertitre2", etc. La numérotation sous cette forme est supprimée lors de la ré-écriture. Par contre, on peut utiliser la numérotation en "1- Intertitre1, "2- Intertitre2", etc.

    Bien cordialement. ^^

     [2]

    Notes :

    [1] Note de bas de page

    [2]

  • Le 7 septembre 2006 19:29, par FredoMkb

    Bonsoir Yann :-)

    Désolé pour cette réponse tardive... je suis en train de regarder ce petit problème des numéros suivis d’un point qui ne s’affichent pas correctement...

    Pour ce qui est du lien sur l’intertitre "Sommaire", disons que c’était un peu voulu à la base, histoire de pouvoir se rendre en tête de page en cliquant sur ce lien... mais, après ta remarque, je me demande si c’est vraiment pertinent ou du moins utile... tu en penses quoi ?

    Bref, si ce lien est gênant, voici comment le supprimer :

    - Édite le fichier Php du filtre

    - Tu trouveras, vers la fin du code, un commentaire qui dit :

    // Si le titre considere est "sommaire", alors on fabrique le debut du sommaire.

    - Juste en dessous, 2e ligne, tu dois trouver l’instruction suivante :

    $titreSommNew = "[somm<-]\n{{{[".$titreClean."->\"\"]}}}\n\n";

    - Il suffit donc de la remplacer par celle-ci :

    $titreSommNew = "[somm<-]\n{{{".$titreClean."}}}\n\n";

    Voilà, de cette manière tu n’auras plus de lien sur l’intertitre "Sommaire".

    Je continue à regarder comment résoudre le problème des numéros des intetitres... je te tiens au courant ici... je sortirais peut-être une mise à jour, ce sera mieux je pense...

    Merci, a+ :-)

    Note [1]

  • Le 9 septembre 2006 11:23

    Fredo,

    Merci, j’ai effectivement enlevé ce lien sur l’intertitre "Sommaire" qui ne me semble pas intéressant. En effet, la navigation induite par ce sommaire interne a un sens puisque les liens du sommaire permettent de rejoindre un intertitre et réciproquement. Mais dans le cas du lien sur "Sommaire" où aller ? (haut de page ?, menu ?, etc.)

    Je trouve plus élégant de laisser l’ancre associée à "Sommaire" pour que le développeur du squelette puisse choisir de placer un lien pour joindre ce sommaire si besoin, au même titre (sic !) qu’il gérera le lien pour revenir en haut de page par exemple.

    Je ne sais pas si j’ai été clair là ;-)

    PS : une amélioration sympa (mais pas essentielle !) pourrait être la prise en compte des 3 niveaux d’intertitres proposées (c.f. plugin Barre Typo Enrichie).

  • Le 9 septembre 2006 13:53, par Yann974

    J’en profite pour te mentionner le bug suivant : si un intertitre comprend des crochets, il y a erreur.

    [ Au mésozoïque [-260 à -70 Ma] ->#inter2]

  • Le 9 septembre 2006 14:11, par Yann974

    Fredo, là je crois que j’exagère mais je viens de me rajouter qques cheveux blancs en passant du temps sur le - pourtant court - code php et je n’arrive pas à voir comment le modifier pour ne pas afficher l’intertitre "Sommaire" ...dont finalement je n’ai rien à faire (le lecteur comprenant que ce tableau/liste EST un sommaire).
  • Le 9 septembre 2006 16:48, par FredoMkb

    Salut Yann :-)

    Petite réponse groupée...

    Bon, avant tout, saches que grâce à toutes tes remarques, je suis en train de préparer une mise à jour qui devrait normalement être en ligne ce soir.

    Ok pour le lien sur l’intertitre "Sommaire", je l’ai supprimé sur la nouvelle version du filtre... ce n’était pas utile en somme...

    Alors, effectivement, j’ai un peu de mal à saisir tout le sens de ta phrase :

    Je trouve plus élégant de laisser l’ancre associée à "Sommaire" pour que le développeur du squelette puisse choisir de placer un lien pour joindre ce sommaire si besoin, au même titre (sic !) qu’il gérera le lien pour revenir en haut de page par exemple.

    Lorsque tu parles de "Sommaire", c’est bien de l’intertitre qu’il s’agit, c’est ça ?

    Si c’est le cas, normalement l’ancre précède l’intertitre, mais je vais essayer de les associer directement... je ne me souviens plus si je n’ai pas déjà essayé cette syntaxe... il me semble que oui, mais je vais faire d’autres tests...

    Pour la prise en compte des trois niveaux, là ça s’annonce plutôt plus compliqué comme traitement, puisque, pour bien faire, il faudrait pouvoir respecter l’arborescence de l’imbrications des différents intertitres, et donc faire l’analyse dans une boucle considérant chaque intertitre dans leur ordre d’apparition... et là, honnêtement, je ne sais pas si je suis assez calé pour un tel développement...

    Je vais tout-de-même garder cette suggestion, pour pouvoir étudier ce cas de figure à tête réposée plus tard (pas mal de projets en cours pour le moment)... et qui sait, sur un malentendu ;-), et si je trouve les solutions les mieux adaptées, peut-être pour une prochaine version du filtre...

    Bon, pour le masquage de l’intertitre "Sommaire", je ne vais pas intégrer cette modification sur la prochaine version, puisque, dans l’approche que j’ai choisi d’adopter, c’est-à-dire, celle qui tente de reprendre les standards de l’édition papier, le sommaire est le plus souvent traité comme un chapitre à part entière, je vais donc préserver cette approche...

    En revanche, pour ton utilisation personnelle, voici la modification à faire :

    - Dans la boucle principale qui traite chaque intertitre, tu dois repérer le commentaire suivant :

    // Si le titre considere est 'sommaire', alors on fabrique le debut du sommaire.

    - Juste en dessous, à la deuxième ligne, il faut remplacer toute l’instruction qui débute par la variable "$titreSommNew" par le code suivant :

    $titreSommNew = '[somm<-]'."\n";

    C’est à dire qu’on a éliminé toute trace de l’intertitre, et on ne garde que l’ancre pour pouvoir remonter jusqu’au sommaire...

    Alors, la version qui sortira ce soir apportera des solutions aux différents bugs que tu m’as signalé, comme celui de devoir indiquer explicitement l’argument vide lors de l’intégration du filtre dans un fichier Html, ou celui des intertitres numérotés par un chiffre + point au début, ainsi que le problème des crochets... normalement tout est Ok dans cette nouvelle version... merci beaucoup en tout cas Yann pour avoir joué le périelleux jeu du bêta-testeur... y’a pas mieux que l’expérience des utilisateurs pour faire évoluer un projet, merci :-)

    Voilà Yann, j’espère ne pas avoir été trop confus, et rendez-vous ce soir pour la nouvelle version (le plus long c’est souvent de rédiger l’article de présentation... et en plus j’aime pas bien faire ça :-/)...

    à+ :-)

  • Le 10 septembre 2006 08:43, par Yann974

    Mais quelle réactivité Fredo ! Tu m’épates. Bon sang, tu dois pas compter tes heures là-dessus. Bref, merci encore pour ma petite modif (ajoute-là dans la doc, ça pourrait intéresser plus d’un Webmestre-Spipien). Je trouve que c’est une bonne chose effectivement que l’ancre soit positionnée avant l’intertitre "Sommaire".

    Promis, avec les efforts que tu développes, je testerai ta version de ce soir. Y’a pas de raison qu’il n’y ai que toi qui bosse !

    Bon courage Fredo.

  • Le 10 septembre 2006 11:39, par FredoMkb

    Salut Yann :-)

    Oui, en fait, à propos de la réactivité et les nombreuses heures que je consacre à mes projets persos, disons que je n’ai pas grand mérite, puisque étant depuis quelques temps au chôme-dû... et bien, je dispose d’un peu plus de temps qu’avant... alors j’en profite un peu pour concrétiser quelques projets que j’avais envie de faire...

    Bon, j’ai pris un peu de rétard sur la nouvelle version du filtre... en fait, il est pratiquement fini, je test encore quelques cas de figure, je nettoie un peu le code (c’est un peu le bordel pour l’instant ;-), et ça devrait rouler... il restera le plus long (et fastidieux aussi), rédiger toute la doc...

    Sinon, saches qu’il y aura quelques améliorations intéressantes au menu de cette nouvelle version... je pense que tu vas apprécier... :-)

    Bref, si je ne suis pas dérangé cette aprèm’, je pense publier cette nouvelle version ce soir... ou alors demain dans la journée... on verra...

    Merci Yann, à+ :-)

  • Le 11 septembre 2006 13:25, par FredoMkb

    Bonjour à tous :-)

    Juste pour vous signaler que la nouvelle version du filtre viens de sortir, numérotée 1.2, et ça se passe par ici...

    Bonne découverte :-)

  • Haut
Suivre la vie du site RSS 2.0 | SPIP | Mgs MGS