Как написать дополнительное поле форматирования для существующего поля

9

Я хотел бы написать новый форматировщик поля для существующего типа поля. Я не хочу заменять существующие форматеры, но предлагаю новую опцию.

Или мне лучше использовать theme_preprocess_field () для небольших изменений? Но это, кажется, сложнее поддерживать, и я хотел бы оставить открытыми опции моих редакторов контента (и в графическом интерфейсе).

Может кто-нибудь указать мне пример правильного способа сделать это?

стог
источник

Ответы:

13

Лично я бы сказал, что средство форматирования - лучшее решение.

Вам нужно реализовать только два хука:

Например:

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

Для более глубокого ознакомления загрузите модуль «Примеры» и посмотрите на field_example - там есть много кода и документации, которые помогут вам в этом.

Клайв
источник
Вы также можете быть заинтересованы в реализации hook_field_formatter_settings_form и hook_field_formatter_settings_summary, чтобы вы могли дать своему пользователю несколько вариантов изменения представления поля.
ndvo
2

Вы можете разработать собственный модуль или использовать модуль «Пользовательские форматеры».

В первом случае вы должны написать модуль , который реализует некоторые Drupal 7 крючков: hook_field_formatter_info(), hook_field_formatter_view()и hook_theme(). hook_field_formatter_info()Используется для объявления типа форматера. Эта функция возвращает массив с описанием форматера. Ключом будет имя форматера, и он будет иметь массив с меткой и типами полей. После вы должны реализовать hook_field_formatter_view()и hook_theme()для того, чтобы определить шаблон. Вы можете найти более подробную информацию об API F ield Formatter в документации .

Во втором случае вы можете использовать модуль Custom Formatters, который позволяет создавать собственные средства форматирования отображения для каждого поля. С помощью этого модуля вы можете создать средство форматирования, используя пользовательский код PHP или код HTML с токенами.

Я предлагаю второй способ, потому что он очень прост в использовании и настройке.

Finex
источник