既存のフィールドに追加のフィールドフォーマッタを作成するにはどうすればよいですか


9

既存のフィールドタイプ用の新しいフィールドフォーマッタを記述したいと思います。既存のフォーマッタを置き換えたくありませんが、新しいオプションを提供します。

または、私はtheme_preprocess_field()を使用して小さな変更を行う方が良いですか?しかし、これは維持するのが難しいようです。コンテンツエディターのオプションを(およびGUIで)開いたままにしたいと思います。

誰かがこれを行う適切な方法の例を私に指摘できますか?

回答:


13

個人的には、フォーマッターがより良い解決策だと思います。

実装する必要があるフックは2つだけです。

例えば:

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 2018

2

カスタムモジュールを開発するか、「カスタムフォーマッタ」モジュールを使用できます。

最初のケースでは、いくつかのDrupal 7フックを実装するモジュールを記述する必要があります:hook_field_formatter_info()hook_field_formatter_view()およびhook_theme()hook_field_formatter_info()フォーマッタタイプを宣言するために使用されます。この関数は、フォーマッターの説明を含む配列を返します。キーはフォーマッタ名であり、ラベルとフィールドタイプの配列があります。あなたが実装する必要が後hook_field_formatter_view()hook_theme()テンプレートを定義するために。フィールドフォーマッタAPIの詳細については、ドキュメントをご覧ください。

2番目のケースでは、すべてのフィールドのカスタム表示フォーマッターを作成できるカスタムフォーマッターモジュールを使用できます。このモジュールを使用すると、カスタムPHPコードまたはトークン付きのHTMLコードを使用してフォーマッターを作成できます。

使い方も設定も非常に簡単なので、2番目の方法をお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.