[spip-dev] Patch: passage de parametres aux filtres

Bonjour.

J'ai voulu, dans un texte tronqué renvoyé par #INTRODUCTION, créer un
lien des trois points de continuation -- (...) -- vers l'article
entier (soit #URL_ARTICLE). Je n'ai pas trouvé de moyen simple de
faire ça en standard, mais j'ai trouvé un moyen un peu tordu, qui m'a
donné l'occasion d'implémenter une fonctionnalité mentionnée dans le
TODO.txt : le passage de paramètres à un filtre.

J'ai adopté la syntaxe proposée dans le TODO, soit
[(#EXPRESSION||filtre{p1,p2})]
Les arguments sont donc passés entre accolades, avec les limitations
évidentes (pas de |, pas de { ou }, ...).

Le patch pour mettre ça en oeuvre est tout petit : il suffit de
transformer la fonction applique_filtres de inc-calcul-squel.php3 en:

@ Olivier Aubert <oaubert@bat710.univ-lyon1.fr> :

J'ai voulu, dans un texte tronqué renvoyé par #INTRODUCTION, créer un
lien des trois points de continuation -- (...) -- vers l'article
entier (soit #URL_ARTICLE). Je n'ai pas trouvé de moyen simple de
faire ça en standard, mais j'ai trouvé un moyen un peu tordu, qui m'a
donné l'occasion d'implémenter une fonctionnalité mentionnée dans le
TODO.txt : le passage de paramètres à un filtre.

Merci pour le patch, je l'installe (une modif tout de même pour utiliser
ereg, car on n'est pas sûr d'avoir la librairie preg_)

Pour ce qui est de ton problème, un filtre standard aurait fonctionné, pour
supprimer les (...), avec
[(#INTRODUCTION|supprimer_points_suspension)] <a href='#URL_ARTICLE'>(...la suite)</A>

J'ai adopté la syntaxe proposée dans le TODO, soit
[(#EXPRESSION||filtre{p1,p2})]

Remarque : un seul | fonctionne pour la plupart des balises spip (le || sert
à contourner la question des "faux filtres" servant à mettre un URL sur un
#LOGO_ARTICLE par exemple)

Les arguments sont donc passés entre accolades, avec les limitations
évidentes (pas de |, pas de { ou }, ...).

OK. Le filtre doit être défini de la manière suivante :

function filtre($texte, $arg1='valeur par defaut1', $arg2='valeur par défaut 2')
{
    ....calculs....
    return (une chaine de caractères);
}

[(#INTRODUCTION||liensuite($contexte))]
avec
function liensuite($in, $contexte)
{
  return ereg_replace ('\(\.\.\.\)$', '(<a href="' . generer_url_article($contexte['id_article']) . '">...la suite</a>)', $in);
}

Crado, mais astucieux :wink:

-- Fil