Ограничьте тизер отображением только первого значения поля


У меня есть тип контента с полем изображения. Это поле обычно заполняется значениями от 0 до 4. По умолчанию тизер для этого типа контента выводит все изображения от 0 до 4. Как я могу настроить тизер так, чтобы отображалось только первое изображение?

Author: Greg, 2011-03-15

4 answers

Создайте пользовательский модуль, замените 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
Author: tim.plunkett, 2011-03-15 14:54:48

Нет необходимости писать пользовательский код.

Попробуйте использовать Модуль множественного ограничения полей .

Это позволяет вам войти в настройки отображения для вашего типа контента и настроить параметры тизера для отображения только определенного количества значений. Вы даже можете заставить его пропускать значения, например, если вы хотите, чтобы он отображал значения от 2 до 5

.

 12
Author: rooby, 2015-12-22 11:08:25

При использовании шаблона тизера (т.Е.: node--CONTENT-TYPE--teaser.tpl.php ), это работает:

  <?php print render($content['IMAGE-FIELD'][0]); ?>
 4
Author: nelslynn, 2015-09-29 19:43:46

Я использовал 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
Author: Teegan, 2013-10-30 02:28:05