Skip to Navigation

un endroit sur le ouaibe où le bonheur n'est pas qu'un mot ;-)

Création d'un filtre d'entrée pour Drupal

dans

Le contenu des <textarea> est modifié à l'affichage par un ou une suite de filtres. Les buts de ces filtres sont variés:

  • suppression de contenu: balise <script> par exemple,
  • augmentation du contenu: transformer \http://magooweb.com en http://magooweb.com
  • simplification du contenu: "plain text"
  • substitution (exemple: DME)

L'exemple de filtre qui suit est un filtre de la seconde catégorie. Il va chercher les images insérées au moyen de FCKeditor et prendre la valeur de l'attribut title pour l'utiliser comme légende en dessous de cette même image.

Pour créer un filtre, il faut créer un module. Le nom de ce module sera dans cet exemple magoofiltre. Au minimum 2 fichiers sont nécessaires à la naissance d'un module. Les deux seront rangés dans un répertoire du nom du module:

modules
   |- magoofiltre
          |- magoofiltre.info
          |- magoofiltre.module

magoofiltre.info contiendra:

name = magoofiltre
description = various modifications that need a module to Drupal and its modules     
package = magooweb
dependencies = 

magoofiltre.module est le module qu'il faudra activer pour qu'il soit pris en compte. Il se compose de 2 fonctions. La première, ... permet l'affichage d'aide pour l'utilisateur pour qu'il sache que le filtre est en fonction et à quel position (à configurer par l'administrateur). La seconde ... fait le travail de modification du filtre.

<?php
function magoofiltre_filter_process($text) {
/* structure of an image inserted with FCKeditor
* <img width="X" height="Y" src="/path/to/pics" alt="replacement text" title="image title" />
*/

    
$find = "(<img.*) alt=\"(.*)\" title=\"(.*)\"(.*/>)";
    
$change = "<table><tr class=\"image\"><td>\\1 alt=\"\\2\" title=\"\\3\" \\4</td></tr><tr><td class=\"legend\">\\3</td></tr></table>";
   
$output = ereg_replace($find, $change, $text);
    return
$output;
}
?>

Le résultat: l'image, à laquelle on a ajouté l'attribut title est affiché avec le contenu de l'attribut en dessous,