Sérendipité du code

Prendre une heure à creuser le code ou lire la documentation, que choisir ?

Je lisais Stratégie de contenu mobile de Karen McGrane quand le point suivant m’arrêta tandis que je courais comme un chien fou à travers la lande [1] :

Le site Blockbuster […] se contente de tronquer le texte de manière totalement arbitraire […]. Il est frustrant pour l’utilisateur de ne pas pouvoir lire le résumé entier […].

[Chez Netflix,] chaque plate-forme peut choisir quel résumé afficher, et celui-ci n’est pas tronqué.

Karen McGrane, Stratégie de contenu mobile, pp. 119–121

Dans Spip on peut utiliser un champ Descriptif qui permet, comme son nom l’indique, de faire figurer une description de l’article dans une liste d’articles (par exemple sur la page d’accueil). Ensuite pour l’afficher, il suffit de solliciter la balise #DESCRIPTIF (logique). Mais j’ai voulu faire le malin et toujours mettre un extrait au cas où je ne remplirais pas le descriptif. Voilà donc le code simplifié de mes squelettes actuels :

[(#DESCRIPTIF|?
{[(#DESCRIPTIF|paragrapher)],
[(#INTRODUCTION|couper{200}|propre|paragrapher)]}
)]

Autrement dit :

  1. Le champ Descriptif est-il rempli ?
  2. Si oui : l’afficher ;
  3. Si non : afficher l’introduction, la couper à 200 caractères [2].

L’introduction, c’est un mécanisme automatique de Spip qui affiche la description si elle existe, sinon extrait du corps de l’article les n premiers caractères (ici 200, par défaut 600). Poussé par la remarque de Karen McGrane, et fatigué d’écrire à chaque fois un descriptif, je décide de ne plus laisser Spip couper arbitrairement les introductions en plein milieu d’une phrase : il va donc falloir aller dans le code, le comprendre, et décider autre chose (par exemple couper après le premier point).

Je cherche donc dans le code de Spip l’endroit où apparaît « balise_INTRODUCTION », et je trouve balise_INTRODUCTION_dist dans ecrire/public/balises.php. Je potasse la fonction et découvre qu’elle appelle un filtre « introduction » via chercher_filtre('introduction').

Je cherche donc cette fois « filtre_introduction », que je trouve en tant que filtre_introduction_dist dans ecrire/public/composer.php. On se rapproche du but, on se rapproche du but !

Et là, surprise, voilà le code que je lis :

// De preference ce qui est marque <intro>...</intro>
$intro = '';
$texte = preg_replace(",(</?)intro>,i", "\\1intro>", $texte); // minuscules
[…]

Mais alors, se pourrait-il qu’il suffise de mettre une petite balise intro dans le corps de mon article pour que tout soit résolu sans avoir besoin de bricoler comme un sagouin ? Je fais le test, et effectivement, ça fonctionne.

Me voilà alors à creuser un peu partout, et je découvre (comparativement assez vite par rapport à mes recherches) que c’est écrit dans la doc :

L’introduction est prise dans le descriptif s’il est renseigné, sinon elle est calculée depuis le texte : à ce moment là, l’introduction est prise dans le contenu entre les balises <intro> et </intro> si présentes, sinon en coupant le texte à la taille indiquée.

Ah bin voilà. Je vais ensuite lire la documentation de #INTRODUCTION qui me le confirme [3].

Moralité : de morceau de code en morceau de code, j’ai fini par lire la documentation, et réappris à mes dépends qu’il vaut mieux toujours commencer par là. Rangez vos cartables, sortez dans l’ordre, et n’oubliez pas : RTFM [4].

Notes

[1Ne faites pas attention, ça me passera bien un jour.

[2Les Spipeurs qui passent par ici me diront que Spip fait tout ça automatiquement avec la balise #INTRODUCTION. Je suis sûr d’avoir eu une bonne raison de mettre ce bout de code en place, au moment où je l’ai fait, mais ça ne me revient pas.

[3Et même que, en allant voir les différentes versions de l’article, ça existe depuis 2009. On est peu de choses.

[4Relis Ton Fieffé Manuel.

Commentaires

  • Jacques Pyrat (11 novembre 2015)

    Salut Stéphane,

    Toujours dans la doc, tu aurais pu remplacer ton #INTRODUCTION|couper200 par #INTRODUCTION200

    Plus simple non ?

    Répondre à Jacques Pyrat

  • Stéphane (11 novembre 2015)

    Jacques : Oui oui oui j’ai bien vu. :)

    Répondre à Stéphane

  • Emmanuel (12 novembre 2015)

    Où l’on doit ressentir un contentement certain après avoir tant sué et trouvé la solution 🙂

    Mais quand même, c’est beaucoup de temps et de travail que tout ça, pour une simple introduction, au final. C’est en partie toute cette technicité que je fuis aujourd’hui (et que je remets en question) en me coltinant du bête HTML à la main. Qui somme toute est très rapide à faire, tellement que le plaisir de démonter et comprendre les rouages d’un système n’est plus là pour passer agréablement son temps.

    Répondre à Emmanuel

  • Stéphane (13 novembre 2015)

    Emmanuel :

    Où l’on doit ressentir un contentement certain après avoir tant sué et trouvé la solution :)

    Mais quand même, c’est beaucoup de temps et de travail que tout ça, pour une simple introduction, au final.

    Chut, ne sape pas ce qui me reste d’intérêt pour ce qui a été un jour mon hobby ! ;)

    Répondre à Stéphane

  • Nicolas Hoizey (17 novembre 2015)

    Bon sang, même moi je savais ça, tu n’as jamais fait de SPIP, ou quoi ? 😛

    Répondre à Nicolas Hoizey

  • Stéphane (17 novembre 2015)

    Nicolas : Héhéhé. J’ai le tort d’avoir lu la doc quand j’ai commencé (vers 2001) et de ne pas m’y être référé depuis, sur les sujets que je connaissais.

    Je n’étais qu’à moitié marri, vu que ça ne fait jamais de mal de faire de l’excavation de code :)

    Répondre à Stéphane

  • Nicolas Hoizey (18 novembre 2015)

    Je crois qu’on a en gros la même façon de faire, j’ai dû me replonger dans des bouts de doc, voir le code, à chaque version majeure, même si je suivais les commits… 😉

    Répondre à Nicolas Hoizey

Qui êtes-vous ?
Votre message

Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)