Le problème des paragraphes de SPIP

25 avril 2006,
par Romy Têtue

Mots-clefs associés à cet article :

« Tiens, c’est bizarre... pourquoi les textes sont collés les uns aux autres sur cette page ? »

SPIP traite les textes différemment selon qu’ils sont rédigés en un seul paragraphe ou en plusieurs. Il génère automatiquement des paragraphes dès que l’on saute une ligne dans les champs de saisie de l’espace privé, et génère alors des textes correctement découpés en paragraphes, à grand renfort de <p class="spip">.

L’ennui est qu’il n’en génère pas pour les textes saisis d’un bloc, sans saut de ligne. Il en résulte que d’une page à l’autre d’un site, les textes sont correctement balisés de <p> ou pas, comme si c’était au petit bonheur la chance.

Ainsi la balise #TEXTE, par exemple, produira ce code sur une page (pour un texte rédigé en plusieurs paragraphes) :

<p class="spip">Texte paragraphé.</p>
<p class="spip">Texte paragraphé.</p>

et à la page suivante (pour un texte court, constitué d’un seul paragraphe) :

Texte sans paragraphe.

Cela pose problème dès lors que l’on souhaite contrôler l’apparence des textes, notamment par l’espacement des paragraphes. Ceux-ci n’étant pas présents à coup sûr, on ne peut garantir un habillage homogène des textes sur l’ensemble d’un site réalisé avec SPIP et il y a de quoi s’arracher les cheveux pour tenter d’y parvenir.

Attention, ce problème est résolu depuis SPIP 2 (cf. : SPIP paragraphe tout désormais) et la suite de cet article n’est donc plus d’actualité.

Dans SPIP, ne stylez pas la balise p !

L’exemple donné par SPIP dans sa documentation officielle (cf. : Une typographie personnalisée) est étonnamment mal choisi : définir, comme il est conseillé, le style p.spip pour personnaliser la typo sera parfois sans effet, puisque les textes rédigés d’un seul bloc, n’étant pas dotés de balise p, ne sont pas concernés par cette définition de style.

Autre méthode : pour s’assurer d’une mise en page CSSen identique sur les différents navigateurs, certains commencent par une mise à zéro générale (avec le sélecteur universel : * { margin: 0; padding: 0; }) pour redéfinir ensuite les margin et padding au besoin et au cas par cas. Cela concerne typiquement les éléments ul, li, et p.
Pour aérer les textes on déclarera par exemple ceci : p { margin-bottom: 1em; }. Ce qui produit un effet tout à fait satisfaisant... sauf pour les textes rédigés d’un seul bloc qui se retrouvent collés à ce qui les succède, en l’occurrence le post-scriptum et/ou les notes de bas de page. Zut !

Première recommandation donc : dans SPIP, ne touchez surtout pas aux paragraphes ! Faites comme si la balise p n’existait pas, ne la stylez pas, même indirectement avec le sélecteur universel, comme dans l’exemple précédent.

Pâles astuces…

Une solution est de s’assurer de l’espacement des textes non pas grâce aux p, mais par des div additionnelles englobant chacun d’eux. C’est effectivement ce que l’on peut voir dans les squelettes par défaut, avec leur succession de div dédiées :

<div class="chapo">#CHAPO</div>
<div class="texte">#TEXTE</div>
<div class="ps">#PS</div>
<div class="notes">#NOTES</div>

De cette façon, on peut contrôler l’apparence de ces différents textes, même lorsque ceux-ci ne sont pas dotés de balises p. Ceci reste tout de même approximatif, et c’est dommage de devoir ainsi compliquer et alourdir son code de div par ailleurs inutiles.

Une autre solution repose sur le(s) personne(s) en charge de la rédaction du site — ce qui suffit à me déplaire : pourquoi les embêter avec ça ? — : il suffit qu’elles pensent, lors de la saisie, à sauter au moins une ligne, même lorsque c’est inutile. On s’assure ainsi de la génération de balises p.

Un filtre pour générer des paragraphes partout

Pour éviter ce problème, chacun-e code un filtre dans son coin. Le plus étonnant est que SPIP est équipé d’un filtre qui permet de paragrapher. Mais celui-ci n’est pas appliqué systématiquement. D’ailleurs, il ne semble pas fonctionnel. J’ai fini par en bidouiller un que j’ajoute à chaque nouvelle installation de SPIP.

Voici le code à ajouter au fameux fichier mes_fonctions :

// Cette fonction cree le paragraphe s'il n'existe pas (texte sur un seul para)
// en verifiant d'abord l'absence de balise de type bloc autour du texte
function paratout($texte) {
        if (ereg("^[A-Za-z0-9\&raquo;\"'ÉÀÈéèà]", $texte)
        or eregi("^<(b|i|em|strong|sub|sup|tt|pre|code|cite|q|abbr|acronym|span|img|a|br|font)", $texte) 
        ) {
        $texte = "<p>" . $texte . "</p>" ;
        } 
return $texte;
}

Sans oublier de l’appliquer à chaque balise affichant du texte :

[(#DESCRIPTIF|paratout)]
[(#CHAPO|paratout)]
[(#TEXTE|paratout)]
[(#PS|paratout)]
[(#NOTES|paratout)]

Hmm… je suis sûre qu’il y a mieux à faire, mais ça dépanne bien en attendant.

{#TITRE,#URL_ARTICLE,#INTRODUCTION}

Vos commentaires

  • Le 11 octobre 2006 à 14:52, par Romy Têtue En réponse à : Le problème des paragraphes de SPIP

    Voilà un grand moment de bonheur : il sera bientôt possible de tout paragrapher correctement, et pas seulement si ça contient au moins deux paragraphes. C’est annoncé ici sur spip-dev : paragrapher.

  • Le 14 février 2007 à 10:03, par Yann974 En réponse à : Le problème des paragraphes de SPIP

    Bien vu Romy ! Cela fait longtemps que j’attends la chute de cette limitation (bug, oubli ?). L’annonce du 11 octobre est donc effectivement un grand moment de bonheur !

    Reste une limitation incompréhensible : l’ordre d’apparition des articles/rubriques (il faut toujours passer par l’astuce de numérotation des titres... pas très élégant). Dommage.

  • Le 26 mars 2007 à 09:34, par Manu En réponse à : Le problème des paragraphes de SPIP

    Il y a quelques sites (dont le tien, bien sûr), dont la visite rend toujours joyeux et qui font se dire que tout n’est forcément si noir dns ce monde de brutes...

    Je voulais juste signaler une ch’tite fôte qui traîne dans le code de la fonction : ...en vérifiant d’abord l’absense absence de balise de type bloc autour du texte...... Allez, bonne journée et merci pour tout.

  • Le 11 août 2007 à 15:01, par Franz En réponse à : Le problème des paragraphes de SPIP

    Je suis en train de travailler avec une version svn de SPIP (1.9.3. svn 9900), qui renvoie systématiquement tous les champs bloc paragraphés. C’est effectivement mieux dans pas mal de cas, mais c’est parfois un peu gênant, notamment quand on veut aligner un descriptif, une date et d’autres informations sur une même ligne. Je cherche donc un filtre qui retire les paragraphes mais juste eux (et ne touche pas aux liens et aux autres mises en formes). Est-ce que ça a été prévu ? Est-ce que tu sais si ça existe ? Merci.

  • Le 12 août 2007 à 15:24, par Romy Têtue En réponse à : Le problème des paragraphes de SPIP

    Oui, bien sûr ! S’il était impossible d’ajouter les p manquants, il existe tout ce qu’il faut pour retirer facilement les p qui seraient gênants, cf. : à propos des p, discussion initiée par toutati, 10 May 2007.
    Par contre, je ne sais pas encore ce qu’il en sera de la prochaine version de SPIP.

  • Le 19 août 2007 à 22:43, par Franz En réponse à : Le problème des paragraphes de SPIP

    Merci. C’est bien [(#BALISE*|typo)] qu’il me fallait mais je ne l’avais pas trouvé tout seul.

  • Le 19 mai 2009 à 19:07, par Francois En réponse à : Le problème des paragraphes de SPIP

    Merci beaucoup.

  • Le 21 octobre 2009 à 21:33, par Françoise En réponse à : Le problème des paragraphes de SPIP

    Je débute dans spip. Lorsque j’écris un texte, je voudrais l’aérer, c’est à dire faire des paragraphes espacés d’une ligne. Je sais faire des paragraphe, mais je voudrais les espacer. On me dit qu’il faut mettre une ligne sans rien. mais je ne n’arrive pas à faire cette fichue ligne sans rien. Avant je faisais : entrée +
    +espace, et cela forçait le passage à la ligne. Le texte était moins compact. maintenant je n’arrive plus à le faire

  • Le 21 octobre 2009 à 22:58, par Romy Têtue En réponse à : Le problème des paragraphes de SPIP

    Je n’arrive pas à comprendre si tu as un problème de saisie ou d’habillage graphique ?

    Pour créer des paragraphes dans SPIP, il suffit de sauter une ligne tout naturellement, au moment où tu rédige dans l’espace privé. Si ça ne marche pas, c’est que tu as un problème avec la touche « entrée » de ton clavier :-P

    Si tu as bien sauté des lignes mais que l’espace entre les paragraphes du site public ne te satisfait pas, il suffit de modifier l’habillage graphique du site en intervenant sur sa feuille de style, en CSS, comme pour n’importe quel site.

    Dans les deux cas, ton problème n’est pas imputable à SPIP.

  • Le 9 août 2012 à 12:14, par nicellieri En réponse à : Le problème des paragraphes de SPIP

    Ah oui je me disais ce problème est résolu depuis le SPIP 2 !!! C’est tand mieux d’ailleurs :)

Répondre à cet article

forum message

Raccourcis : {{gras}} {italique} -liste [bla->url] <q> <quote> <code>.

Qui êtes-vous ? (optionnel)

Suivre les commentaires : RSS 2.0 | Atom