Відповіді:
Створіть спеціальний модуль, замініть 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);
}
}
Докладнішу інформацію див. У документації на зачіпку_провідності_перегляду () .
if ($view_mode == 'teaser' && $entity->type == 'CONTENT_TYPE')
.
Не потрібно писати спеціальний код.
Спробуйте скористатися полевим модулем множинного обмеження .
Це дозволяє зайти в параметри відображення для вашого типу вмісту та налаштувати настройки тизера для відображення лише певної кількості значень. Ви навіть можете змусити її пропускати долини, наприклад, якщо ви хочете, щоб вона відображала значення від 2 до 5
.
Я використовував гачку_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']);
}
}
}
ПРИМІТКА. Якщо у вас включений набір дисплеїв, це можна зробити на вкладці керування дисплеєм.