Un formateur CCK permet de transformer l’affichage d’un champ en ce que l’on veut, ce n’est ni plus, ni moins qu’une fonction de thème.

Le choix de l’utilisation d’un formateur se fait par l’intermédiaire de l’administration des types de contenus via la rubrique ‘Afficher les champs’. Pour chaque champ vous avez un menu déroulant avec les différents formateurs disponibles.

Prenons l’exemple d’un champ image. Grâce aux différents formateurs disponibles vous avez le choix d’afficher à l’internaute un lien url du fichier, le chemin de l’image ou encore l’image elle même.

La réalisation d’un formateur est vraiment simple. Nous allons donc voir comment en créer un afin de transformer l’affichage d’un champ texte dans lequel on saisit des numéros de téléphone en quelque chose de plus lisible. Cet exemple n’a pas grand interêt mais il va nous permettre de mettre en œuvre facilement la création d’un formateur.

1) Déclaration du formateur CCK

Tout commence par la déclaration de notre formateur à Drupal par le biais de la fonction hook_field_formatter_info()

/**
* Implementation of hook_field_formatter_info().
*/
function monmodule_field_formatter_info() {
  $formatters = array(
    'customphonenumber' => array(
      'label' => t('Modif num tél'),
      'field types' => array('text'),
      'description' => t("Transformation de l'affichage d'un numéro de téléphone"),
    ),
  );

  return $formatters;
}

Grâce à cette fonction nous venons de déclarer notre nouveau formateur ‘customphonenumber’ ainsi que ses paramètres.
- label : c’est le nom qui sera affiché dans la liste des formateurs disponibles
- field types : c’est la liste des champs cck sur lesquels vous pourrez appliquer le formateur.
- description : la description complète de votre champ.

2) Implémentation de la fonction de thème

Nous allons maintenant implémenter le hook_theme() afin d’appliquer un thème à notre formateur.

/**
* Implementation of hook_theme().
*/
function monmodule_theme() {
  $theme = array(
    'monmodule_formatter_customphonenumber' => array(
      'arguments' => array('element' => NULL),
    ),
  );

  return $theme;
}

Il ne nous reste plus qu’à construire notre thème afin de modifier l’apparence du champ.

3) Création de notre thème

Notre thème va nous permettre d’effectuer les transformations que l’on veut sur notre champ. Toutes les informations du champs se trouvent dans la variable $element.

/**
* Theming functions.
*/
function theme_monmodule_formatter_customphonenumber($element) {
  $output = '';
  $phone_number = $element['#item']['value'];
  $output = wordwrap(filter_xss($phone_number), 2, '.', 1);

  return $output;
}

Maintenant pour appliquer votre formateur il ne vous reste plus qu’à vous rendre sur la page ‘Afficher les champs’ de votre type de contenu afin de le sélectionner. N’oubliez pas que pour que votre champ apparaisse dans la liste, vous devez régénérer les thèmes disponibles en flushant vos caches, afin que vos modifications soient prises en compte.

6 Responses to Créer un formateur CCK

Avatar

selinav

mai 20th, 2010 at 10 h 56 min

merci pour ce tuto qui va bientôt me servir.

Avatar

loR

mai 24th, 2010 at 22 h 56 min

Oui, merci Julien, pour ce nouveau tuto.

Une question : sais-tu si cela fonctionne sous D5 (j’ai cherché la fonction dans l’api mais ne l’ai trouvé que pour D7). A ce propos, avec en plus la sortie de D7, un tag de version serait bienvenu. :)

++

Avatar

stef

octobre 24th, 2010 at 22 h 01 min

Tout ça a l’air intéresant et fort simple… mais l’histoire ne dit pas où mettre tous ces codes. Il semble que des pré-requis soient nécessaires mais je ne les ai pas :(

Des précisions pour les newbies ?

Avatar

Julien

octobre 25th, 2010 at 12 h 44 min

Effectivement pour créer un formateur CCK il te faut créer un module Drupal contenant un fichier .info et un fichier .module et c’est dans ce dernier que tu pourras placer ton code.

Avec Drupal, c’est toujours la même chose. Il faut créer un module pour ajouter des fonctionnalités et étendre les possibilités de son site.

Merci pour ton commentaire Steph. Je note que ce pré-requis si anodin pour moi ne l’est en faite pas pour tout le monde et c’est sûrement un sujet que je devrait traiter. En attendant voici un lien pour apprendre à créer ton premier module : http://arnumeral.fr/tutoriels/drupal/creer-un-module-pour-drupal

Avatar

selinav

novembre 29th, 2011 at 17 h 14 min

est-ce que cela fonctionne pour drupal 7?

Avatar

Julien

décembre 5th, 2011 at 9 h 24 min

@selinav : Oui le principe est le même mise à part que les fonctions ont changé. Voici une exemple ici : http://www.computerminds.co.uk/articles/creating-new-field-formatters-drupal-7

Comment Form



About me

about me

Bienvenue sur mon blog. Sur cet espace j’essaie de partager au mieux ma passion pour le web et actuellement mon engouement pour Drupal. Vous trouverez ici mes découvertes, mes problématiques et les solutions rencontrées.

I am going to DrupalCon London!

Commentaires

  • zanane: Merci Julien ! Bravo pour ton site et ton esprit de partage [...]
  • vikin: Bonjour Julien. Cela fait quelques temps que je souhaite créer un blog en utilisant Drupal. Cer [...]
  • Julien Desrosiers: Bonne idée! Ça me fait penser à The Daily WordPress Reference, qui est un peu comme ça mais q [...]
  • fofiedelly: merci pour les astuces!! en passant ton blog tombe à l'heure meme où je me met sous drupal et il e [...]
  • Julien: Bonjour Non il n'y aura pas de version Française de [...]