Jak napisać dodatkowy formater pola dla istniejącego pola

9

Chciałbym napisać nowy formater pola dla istniejącego typu pola. Nie chcę zastępować żadnych istniejących formatów, ale oferuję nową opcję.

Czy może lepiej użyć theme_preprocess_field () do drobnych zmian? Wydaje się to jednak trudniejsze w utrzymaniu i chciałbym pozostawić otwarte opcje edytorów treści (i GUI).

Czy ktoś może wskazać mi przykład właściwego sposobu na zrobienie tego?

Stóg
źródło

Odpowiedzi:

13

Osobiście powiedziałbym, że formatyzator jest lepszym rozwiązaniem.

Są tylko dwa haki, które musisz zaimplementować:

Na przykład:

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

Aby uzyskać bardziej dogłębne spojrzenie, pobierz moduł Przykłady i spójrz na pole_przykład - jest tam mnóstwo kodu i dokumentacji, które pomogą Ci na drodze.

Clive
źródło
Możesz być także zainteresowany wdrożeniem hook_field_formatter_settings_form i hook_field_formatter_settings_summary, abyś mógł dać użytkownikowi pewne opcje zmiany sposobu prezentacji pola.
ndvo
2

możesz opracować moduł niestandardowy lub użyć modułu „Niestandardowe formatory”.

W pierwszym przypadku trzeba napisać moduł, który implementuje kilka Drupal 7: haki hook_field_formatter_info(), hook_field_formatter_view()i hook_theme(). hook_field_formatter_info()Służy do deklarowania typu formatyzatora. Ta funkcja zwraca tablicę z opisem formatera. Klucz będzie nazwą formatyzatora i będzie zawierał tablicę z etykietą i typami pól. Po zaimplementowaniu hook_field_formatter_view()i hook_theme()zdefiniowaniu szablonu. Więcej informacji na temat interfejsu API formatera pola można znaleźć w dokumentacji .

W drugim przypadku możesz użyć niestandardowego modułu formatowania, który umożliwia tworzenie niestandardowych formatów wyświetlania dla każdego pola. Za pomocą tego modułu możesz utworzyć formatyzator przy użyciu niestandardowego kodu PHP lub kodu HTML z tokenami.

Sugeruję drugi sposób, ponieważ jest bardzo łatwy w użyciu i konfiguracji.

FiNeX
źródło