¿Cómo escribo un formateador de campo adicional para un campo existente?

9

Me gustaría escribir un nuevo formateador de campo para un tipo de campo existente. No quiero reemplazar ningún formateador existente, pero ofrezco una nueva opción.

¿O es mejor usar un theme_preprocess_field () para hacer modificaciones menores? Pero esto parece ser más difícil de mantener y me gustaría mantener abiertas las opciones de mis editores de contenido (y en la GUI).

¿Alguien puede señalarme un ejemplo de la forma correcta de hacer esto?

Almiar
fuente

Respuestas:

13

Personalmente, diría que un formateador es la mejor solución.

Solo hay dos ganchos que necesita implementar:

Por ejemplo:

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;
}

Para una mirada más profunda, descargue el módulo de Ejemplos y mire field_example: hay un montón de código y documentación para que pueda seguir su camino.

Clive
fuente
También puede estar interesado en implementar hook_field_formatter_settings_form y hook_field_formatter_settings_summary para que pueda darle a su usuario algunas opciones para cambiar la forma en que se presenta el campo.
ndvo
2

puede desarrollar un módulo personalizado o utilizar el módulo "Formateadores personalizados".

En el primer caso hay que escribir un módulo que implementa algunas de Drupal 7 ganchos: hook_field_formatter_info(), hook_field_formatter_view()y hook_theme(). hook_field_formatter_info()Se utiliza para declarar el tipo de formateador. Esta función devuelve una matriz con la descripción del formateador. La clave será el nombre del formateador y tendrá una matriz con la etiqueta y los tipos de campo. Después de que tenga que implementar hook_field_formatter_view()y hook_theme()para definir la plantilla. Puede encontrar más detalles sobre la API de formateador de campo en los documentos .

En el segundo caso, puede usar el módulo Formateadores personalizados que permite crear formateadores de pantalla personalizados para cada campo. Con este módulo puede crear el formateador utilizando código PHP personalizado o código HTML con tokens.

Sugiero la segunda forma porque es muy fácil de usar y configurar.

FiNeX
fuente