Обмежити тізер для відображення лише першого значення поля


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);
  }
}

Докладнішу інформацію див. У документації на зачіпку_провідності_перегляду () .


Це виглядає багатообіцяюче, я спробую. Минуло кілька днів, перш ніж я зможу це здійснити і звітувати. Я відносно новий в написанні модулів, тому у мене є кілька запитань: (1) чи буде працювати ваш зразок коду (не виходить з ладу), коли в полі є нульові значення, і (2) чи буде він працювати (не виходить з ладу), коли є інші типи вмісту без поля Зображення? Спасибі!
Грег

1) Так, так і повинно. 2) Ви можете змінити оператор if if ($view_mode == 'teaser' && $entity->type == 'CONTENT_TYPE').
tim.plunkett

4
Або просто && isset ($ entit-> content ['field_image']), тоді вам не потрібно оновлювати код, додаючи поле до іншого типу вмісту або перейменуючи його, або .. :)
Бердір,

Хммм. Це може спрацювати, але це приклад включення в код того, що має бути в темі.
artfulrobot

Він буде працювати, але якщо ви вирішите такі думки за допомогою користувацького коду, сайт буде в майбутньому менш рентабельним. Використовуйте замість цього якийсь модуль з drupal.org, згаданий в інших відповідях.
Бобiк

12

Не потрібно писати спеціальний код.

Спробуйте скористатися полевим модулем множинного обмеження .

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

.


4

Якщо використовується шаблон тизера (тобто: вузол - CONTENT-TYPE - teaser.tpl.php ), це працює:

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

1

Я використовував гачку_field_extra_fields () і kuk_node_view (), щоб створити нове поле для відображення першого зображення, щоб я не підробляв оригінальне поле зображень.

ho_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;
}

Тоді гак_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']);
    }
  }
}

ПРИМІТКА. Якщо у вас включений набір дисплеїв, це можна зробити на вкладці керування дисплеєм.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.