web-dev-qa-db-ja.com

ティーザーを制限してフィールドの最初の値のみを表示する

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

14
Greg

カスタムモジュールを作成し、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() のドキュメントを参照してください。

12
tim.plunkett

カスタムコードを書く必要はありません。

Field multiple limit モジュールを使用してみてください。

これにより、コンテンツタイプの表示設定に進み、特定の量の値のみを表示するようにティーザー設定を構成できます。たとえば、値2〜5を表示する場合は、値をスキップすることもできます。

12
rooby

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

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

私は、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']);
    }
  }
}

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

1
Teegan