Multiple images and Teaser - field.tpl.php решение

theme_hook_suggestions за field и view_mode

Подобна ситуация на Multiple images and Teaser може да се реши и с темплейт на field. По подразбиране може да направим темплейти за различни ситуации като field за content type, но точно за тази не е предвиден вариант по подразбиране. Затова ще си добавим модел за име на темплейта (на снимката), който да включва и view_mode (full, teaser и останалите).

Добавяме в template.php следния код (заменяме THEME с машинното име на текущата тема)

function THEME_preprocess_field(&$variables, $hook) {
  $variables['theme_hook_suggestions'][] = 'field__' . $variables['element']['#field_name'] . '__' . $variables['element']['#view_mode'];
}

Копираме field.tpl.php от /modules/field/theme/ в директорията на текущата тема и го преименуваме на field--field-image--teaser.tpl.php. Редактираме неговият код до следния

<div class="<?php print $classes; ?>"<?php print $attributes; ?>>
  <?php if (!$label_hidden): ?>
    <div class="field-label"<?php print $title_attributes; ?>><?php print $label ?>:&nbsp;</div>
  <?php endif; ?>
  <div class="field-items"<?php print $content_attributes; ?>>
    <div class="field-item"<?php print $item_attributes[0]; ?>><?php print render($items[0]); ?></div>
  </div>
</div>

Премахнали сме обхождането на масива $items и отпечатваме направо първия елемент $items[0].

Трябва да отбележим, че всяка долна черта в модела на името на темплейта във function THEME_preprocess_field(&$variables, $hook) се чете като тире в името на файла на темплейта. Когато името на полето е от няколко думи, то машинното му име вместо паузи е с долна черта за всяка пауза и за него важи правилото долна черта във функцията за тире в името на файла. Същото се отнася и за view_mode. Също както за поле с име field_image за teaser името на файла е field--field-image--teaser.tpl.php.

Category: