Comment créer un filtre d'entrée ?

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Je souhaiterai créer un filtre d'entrée qui me fabriquera des tabs jquery dans ce style : http://stilbuero.de/jquery/tabs/#fragment-29.

J'aimerai pouvoir écrire mon texte de contenu de la façon suivante :

[tab]
[titre1]montitreh2[/titre]
[texte1]blablabla[/texte]
....
[/tab]

Ou quelque chose dans le genre (d'ailleurs si vous avez des idées). Pouvez-vous me conseiller un module de filtre très simple qui fait ce genre de code pour que je fouille dans le code ? Tous les modules que j'ai regardé sont trop compliqués et déprimants (ex: brillant_gallery, bcp trop complexe).

Merci de votre aide.

Forum : 

Tu n'as qu'un hook à implémenter pour qu'un module produise un filtre :

<?php
function mon_module_filter($op, $delta = 0, $format = -1, $text = '') {
 switch (
$op) {
     case
'list' :
            return array (
            
0 => 'Mon filtre'
        
);

        case
'description' :
         return
'Description de mon filtre';

     case
'prepare' : // On n'a rien à préparer
         
return $text;

     case
'process' // qui a dit que ce filtre servait à quelque chose ?
         
return str_replace('a','o',$text);
 }
}
?>

Sachant que ton module peux produire plusieurs filtre, auquel cas il faudra tester la valeur de $delta pour choisir l'action en fonction du filtre.

Hello Yoran,

Merci de m'avoir répondu, j'ai netvibé ton site dés que je l'ai vu. J'ai une question qui découle de ta réponse, notamment au sujet du "Delta" :
- déjà qu'est-ce que tu appelles avoir plusieurs filtres ?
- Qui va appeler la fonction _filter() et à quel moment les paramètres d'entrées (dont le delta) vont être définis ?

J'attends avec impatience ta réponse.

Très cordialement.

PS: j'ai passé deux jours à comprendre la fonction theme(), si seulement j'avais vu ton site plutôt...

Un même module peut fournit un nombre infini de filtres. Chaque filtre issu d'un même module est distingué par son delta.

Ces delta proviennent du case 'list', c'est simplement la clef de chacun des éléments du tableau renvoyé. Dans l'exemple, le seul delta, et donc le seul filtre produit par le module, est '0'.

Le hook_filter est appelé quant lui par Drupal à divers endroit :
- lors tu construis un format (logique ;-)
- lorsque tu paramètres un filtre
- lorsque drupal construit visuellement un contenu en appliquant le format qui contient ton filtre.

Je t'embête encore car je n'ai pas bien compris un point : ok, pour le delta qui est défini dans liste. Mais quand est défini la variable d'entrée $delta qui va dire par exemple "$delta=3" ?

Et dans l'hypothèse qu'on doit appliquer plusieurs filtre pour le module en question, $delta peut-être un tableau ?

En ce moment même je suis sur ton site à lire tes tutos (super design en tout cas, c'est vraiment agréable à lire). Le problème que je rencontre est que je n'ai pas le niveau suffisant pour tout comprendre.

Merci de me répondre, tu es très matinal (moi je n'ai pas de mérite, il est déjà 9h26 à la Réunion).

Attention, il ne faut pas confondre et être précis dans le vocabulaire. On applique pas un ou plusieurs filtres pour un module, un module fournit des filtres à Drupal que Drupal applique sur des contenus (blocs, nodes, etc.).

Donc non, le delta ne peut être un tableau, il identifie de manière précise un et un seul filtre. Ensuite lorsque tu vas dans admin/settings/filters, Drupal va te permettre de définir une liste de filtres, chacun fournis par un module et chacun donc son delta, pour créer un ensemble appelé "format d'entrée".

En d'autres termes, le hook_filter doit être vu comme un service fournit à Drupal décomposé en chacune des étapes de ce service. J'espère que c'est plus clair ainsi.

Ok, il reste des points noirs à comprendre mais je vais coder mon filtre et le module "devel" et firebug pour drupal m'aidera à bien comprendre de quoi il s'agit. Je te remercie pour le moment, je ferais signe plus tard si j'ai des pbs. Je vais partir sur ton exemple et ton blog pour m'inspirer.