Como escrevo um formatador de campo adicional para um campo existente

9

Gostaria de escrever um novo formatador de campo para um tipo de campo existente. Não quero substituir nenhum formatador existente, mas oferecer uma nova opção.

Ou estou melhor usando um theme_preprocess_field () para fazer pequenas alterações? Mas isso parece ser mais difícil de manter e eu gostaria de manter minhas opções de editores de conteúdo abertas (e na GUI).

Alguém pode me indicar um exemplo da maneira correta de fazer isso?

Rick
fonte

Respostas:

13

Pessoalmente, eu diria que um formatador é a melhor solução.

Existem apenas dois ganchos que você precisa implementar:

Por exemplo:

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 uma visão mais aprofundada, faça o download do módulo Examples e veja field_example - há bastante código e documentação para você entrar no seu caminho.

Clive
fonte
Você também pode estar interessado em implementar hook_field_formatter_settings_form e hook_field_formatter_settings_summary, para poder fornecer ao usuário algumas opções para alterar a forma como o campo é apresentado.
Ndvo
2

você pode desenvolver um módulo personalizado ou usar o módulo "Formatadores personalizados".

No primeiro caso, você tem que escrever um módulo que implementa algumas Drupal 7 ganchos: hook_field_formatter_info(), hook_field_formatter_view()e hook_theme(). hook_field_formatter_info()É usado para declarar o tipo de formatador. Esta função retorna uma matriz com a descrição do formatador. A chave será o nome do formatador e terá uma matriz com o rótulo e os tipos de campo. Depois você tem que implementar hook_field_formatter_view()e hook_theme()para definir o modelo. Você pode encontrar mais detalhes sobre a API do formatador de campo nos documentos .

No segundo caso, você pode usar o módulo Custom Formatters , que permite criar formatadores de exibição personalizados para cada campo. Com este módulo, você pode criar o formatador usando código PHP personalizado ou código HTML com tokens.

Sugiro o segundo caminho, porque é muito fácil de usar e configurar.

FiNeX
fonte