フィールドの最初の値のみを表示するようにティーザーを制限する


14

画像フィールドを持つコンテンツタイプがあります。通常、このフィールドには0〜4個の値が入力されます。デフォルトでは、このコンテンツタイプのティーザーはすべて0〜4個の画像を出力します。最初の画像のみを表示するようにティーザーを調整するにはどうすればよいですか?

回答:


12

カスタムモジュールを作成し、交換するMODULENAMEモジュールの名前とし、field_image自分のフィールドの名前で:

/**
 * Implements hook_entity_view().
 */
function MODULENAME_entity_view($entity, $type, $view_mode, $langcode) {
  if ($view_mode == 'teaser') {
    $entity->content['field_image']['#items'] = array_slice($entity->content['field_image']['#items'], 0, 1);
  }
}

詳細については、hook_entity_view()のドキュメントを参照してください。


これは有望に見えますが、試してみます。実装して報告できるようになるまで数日かかる場合があります。私はモジュールを書くのは比較的新しいので、いくつか質問があります:(1)フィールドにゼロ値がある場合、サンプルコードは動作します(クラッシュしません)。 Imageフィールドのない他のコンテンツタイプ ありがとう!
グレッグ

1)はい、そうすべきです。2)ifステートメントをに変更できますif ($view_mode == 'teaser' && $entity->type == 'CONTENT_TYPE')
tim.plunkett

4
または、単に&& isset($ entity-> content ['field_image'])、フィールドを別のコンテンツタイプに追加したり名前を変更したりするときにコードを更新する必要はありません。または.. :)
Berdir

うーん。これはうまくいくかもしれませんが、テーマに含めるべきものをコードに入れる例です。
artfulrobot 14

それは動作しますが、カスタムコードでこのように解決した場合、サイトは今後保守性が低下します。代わりに、他の回答で言及されているdrupal.orgのモジュールを使用してください。
ボビーク

12

カスタムコードを記述する必要はありません。

フィールド複数制限モジュールを使用してみてください。

これにより、コンテンツタイプの表示設定に移動し、ティーザー設定を構成して、特定の量の値のみを表示できます。値2〜5を表示する場合など、値をスキップすることもできます。


4

ティーザーテンプレート(つまり、node--CONTENT-TYPE--teaser.tpl.php)を使用している場合、これは機能します。

  <?php print render($content['IMAGE-FIELD'][0]); ?>

1

最初の画像を表示する新しいフィールドを作成するためにhook_field_extra_fields()とhook_node_view()を使用し、元の画像フィールドを改ざんしないようにしました。

hook_field_extra_fields()は、ノードタイプの管理表示タブに表示される新しいフィールドを初期化します。

function HOOK_field_extra_fields() {
  $extra['node']['NODE_TYPE'] = array(
    'display' => array(
      'primary_image' => array(
        'label' => t('Primary Image'),
        'weight' => 0,
      )
    ),
  );
  return $extra;
}

次に、hook_node_view()を使用して、新しいフィールドのコンテンツとなる最初の画像を追加します。

function HOOK_node_view($node, $view_mode, $langcode) {
  if($node->type == 'NODE_TYPE' && $view_mode == 'teaser') {

    //make sure there are images
    if(!empty($node->field_images)) {
      $node->content['primary_image'] = $node->content['field_images'][0];

      //hide the original field with multiple images
      hide($node->content['field_images']);
    }
  }
}

注:表示スイートを有効にしている場合は、表示管理タブでこれを行うことができます。

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