Comment écrire un formateur de champ supplémentaire pour un champ existant

9

Je voudrais écrire un nouveau formateur de champ pour un type de champ existant. Je ne veux pas remplacer de formateurs existants mais proposer une nouvelle option.

Ou suis-je mieux d'utiliser un theme_preprocess_field () pour effectuer des modifications mineures? Mais cela semble plus difficile à maintenir et je voudrais garder mes options d'éditeurs de contenu ouvertes (et dans l'interface graphique).

Quelqu'un peut-il me montrer un exemple de la bonne façon de procéder?

Meule
la source

Réponses:

13

Personnellement, je dirais qu'un formateur est la meilleure solution.

Il n'y a que deux crochets que vous devez implémenter:

Par exemple:

function MYMODULE_field_formatter_info() {
  return array(
    'my_formatter' => array(
      'label' => t('My formatter'),
      // The important bit...
      'field types' => array('field_type'),
    ),
  );
}

function MYMODULE_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $settings = $display['settings'];
  $element = array();

  if ($display['type'] == 'my_formatter') {
    foreach ($items as $delta => $item) {
      $element[$delta] = array('#markup' => $item['value']);
    }
  }

  return $element;
}

Pour un examen plus approfondi, téléchargez le module Exemples et regardez field_example - il y a beaucoup de code et de documentation pour vous aider sur votre chemin.

Clive
la source
Vous pouvez également être intéressé par l'implémentation de hook_field_formatter_settings_form et hook_field_formatter_settings_summary afin que vous puissiez donner à votre utilisateur des options pour modifier la façon dont le champ est présenté.
ndvo
2

vous pouvez développer un module personnalisé ou utiliser le module "Formateurs personnalisés".

Dans le premier cas , vous devez écrire un module qui implémente quelques Drupal 7 crochets: hook_field_formatter_info(), hook_field_formatter_view()et hook_theme(). hook_field_formatter_info()Est utilisé pour déclarer le type de formateur. Cette fonction renvoie un tableau avec la description du formateur. La clé sera le nom du formateur et elle aura un tableau avec l'étiquette et les types de champs. Après vous devez implémenter hook_field_formatter_view()et hook_theme()afin de définir le modèle. Vous pouvez trouver plus de détails sur l' API F ield Formatter dans la documentation .

Dans le second cas , vous pouvez utiliser personnalisée Formateurs module qui permet de créer formatteurs d'affichage personnalisés pour chaque champ. Avec ce module, vous pouvez créer le formateur en utilisant du code PHP personnalisé ou du code HTML avec des jetons.

Je suggère la deuxième voie car elle est très simple à utiliser et à configurer.

FiNeX
la source