web-dev-qa-db-ja.com

カスタムHTMLをカスタムフィールドに追加する

モジュールで、カスタムフィールドを定義しました。 hook_field_formatter_info()とhook_field_formatter_view()を使用して、そのフィールド内のすべてのアイテム(値)の表示を管理できます。このフィールドの複数の値の使用を許可したい。

この「コレクション」にHTMLを追加するにはどうすればよいですか?プログラム的に、私のモジュール内から

たとえば、私のモジュールに「フルーツ」フィールドを追加するとします。これにより、名前と色を入力できます。今、私はこれをそのように表示したいと思います:

Name: Strawberry. Color: Red
Name: Orange. Color: Orange
Name: Lime. Color: Green
<some>Extra Html</some>

その最後の最後の行を追加する方法は?

私はそれを行うはずのフックへの参照を見つけることができますが、これらすべての情報を一緒に結び付ける方法がわかりません。私は協力しなければならないと思います:

hook_field_prepare_view https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_prepare_view/7

これらのフックを示唆するこのリソースも見つけました: http://www.failover.co/blog/drupal-7-custom-field-formatter-hooks-overview

そして、私はレンダー配列を操作する必要があります。

そして、配列に追加の要素、追加のデルタを追加してみました:

$element[] = array(
    '#type' => 'markup',
    '#markup' => "Test HTML"
);

しかし、Drupalによって無視されるようです

1
Ideogram

$ items配列に空の要素を追加するためにhook_field_prepare_view()を使用するだけでよいことがわかりました

/**
 * Implements hook_field_prepare_view().
 */
function threejs_field_prepare_view($entity_type, $entities, $field, $instances, $langcode, &$items)
{
    $items[1]['footer'] = array( );
}
1
Ideogram

@Ideogramと同じですが、ここに私の完全なコードを示します。たとえば、4つの画像があります。私のフォーマッターは、最初の画像をメイン画像に、残りを最初の画像のサムネイルを含めて作成します。最初に$ itemを追加する必要があります。

/**
 * Implements hook_field_formatter_prepare_view().
 */
function yourmodule_field_formatter_prepare_view($entity_type, $entities, $field, $instances, $langcode, &$items, $displays) {
  foreach ($displays as $key => $display) {
    if ($display['type'] == 'my_formatter') {
      // We need to add an extra item for the main image.
      if (isset($items[$key][0])) {
        array_unshift($items[$key], $items[$key][0]);
      }
    }
  }
}
1
albertski