Wie schreibe ich einen zusätzlichen Feldformatierer für ein vorhandenes Feld?


9

Ich möchte einen neuen Feldformatierer für einen vorhandenen Feldtyp schreiben. Ich möchte keine vorhandenen Formatierer ersetzen, sondern eine neue Option anbieten.

Oder ist es besser, ein theme_preprocess_field () zu verwenden, um kleinere Änderungen vorzunehmen? Dies scheint jedoch schwieriger zu pflegen zu sein, und ich möchte die Optionen meiner Inhaltseditoren offen halten (und in der GUI).

Kann mich jemand auf ein Beispiel für den richtigen Weg hinweisen?

Antworten:


13

Persönlich würde ich sagen, dass ein Formatierer die bessere Lösung ist.

Es gibt nur zwei Hooks, die Sie implementieren müssen:

Zum Beispiel:

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

Laden Sie für einen tieferen Einblick das Modul "Beispiele" herunter und sehen Sie sich "field_example" an. Dort finden Sie zahlreiche Codes und Dokumentationen, die Sie auf den Weg bringen.


Möglicherweise möchten Sie auch hook_field_formatter_settings_form und hook_field_formatter_settings_summary implementieren, damit Sie Ihrem Benutzer einige Optionen zum Ändern der Darstellung des Felds geben können.
ndvo

2

Sie können ein benutzerdefiniertes Modul entwickeln oder das Modul "Benutzerdefinierte Formatierer" verwenden.

Im ersten Fall müssen Sie ein Modul schreiben , das einige Drupal 7 Haken implementiert: hook_field_formatter_info(), hook_field_formatter_view()und hook_theme(). hook_field_formatter_info()Wird verwendet, um den Formatierertyp zu deklarieren. Diese Funktion gibt ein Array mit der Formatierungsbeschreibung zurück. Der Schlüssel ist der Formatierungsname und enthält ein Array mit der Bezeichnung und den Feldtypen. Nachdem Sie implementieren müssen hook_field_formatter_view()und hook_theme()um die Vorlage zu definieren. Weitere Informationen zur Field Formatter-API finden Sie in den Dokumenten .

Im zweiten Fall können Sie das Modul Benutzerdefinierte Formatierer verwenden , mit dem Sie benutzerdefinierte Anzeigeformatierer für jedes Feld erstellen können. Mit diesem Modul können Sie den Formatierer mit benutzerdefiniertem PHP-Code oder HTML-Code mit Token erstellen.

Ich schlage den zweiten Weg vor, da er sehr einfach zu bedienen und zu konfigurieren ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.