Développeur Drupal – Blog d'un passionné, un peu touche à tout, dans le monde du web.
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.
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.
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.
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.
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.
6 Responses to Créer un formateur CCK
selinav
mai 20th, 2010 at 10 h 56 min
merci pour ce tuto qui va bientôt me servir.
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.
++
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 ?
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
selinav
novembre 29th, 2011 at 17 h 14 min
est-ce que cela fonctionne pour drupal 7?
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