Добавление классов first и last для полей с множественными значениями.

К сожалению Drupal 7 по умолчанию добавляет к элементам полей только классы 'odd' и 'even', но не добавляет классы 'first' и 'last' для первого и последнего элемента поля. Этот недостаток можно легко устранить путем переопределения field.tpl.php файла.

Для начала необходимо проверить наличие файла шаблона полей в вашей теме, у него будет имя - field.tpl.php. Если такого файла нет, то нужно скопировать файл шаблона /modules/field/theme/field.tpl.php. Путь для сохранения файла будет таким /sites/all/themes/YOUR_THEME_NAME/templates/field.tpl.php. После чего нужно очистить кэш сайта, что бы Drupal смог найти и определить ваш файл приоритетным для использования.

В шаблон необходимо добавить только 1 строку
<?php print $item['class']; ?>
В элементе массива с индексом 'class' будут содержаться наши дополнительные классы.

  1. <div class="<?php print $classes;?> clearfix"<?php print $attributes; ?>>
  2. <?php if (!$label_hidden) : ?>
  3. <div class="field-label"<?php print $title_attributes; ?>><?php print $label ?>:&nbsp;</div>
  4. <?php endif; ?>
  5. <div class="field-items"<?php print $content_attributes; ?>>
  6. <?php foreach ($items as $delta => $item) : ?>
  7. <div class="field-item <?php print $item['class']; ?><?php print $delta % 2 ? 'odd' : 'even'; ?>"<?php print $item_attributes[$delta]; ?>><?php print render($item); ?></div>
  8. <?php endforeach; ?>
  9. </div>
  10. </div>

Далее необходимо переопределить переменные для полей и добавить индекс 'class', значение которого мы выводим в шаблон. Это нужно сделать в template.php файле вашей темы. Если такого файле нет в вашей теме, то его необходимо создать и добавить следующую функцию, если существует - то добавить её в файл.

  1. /**
  2.  * Override or insert variables into the field template.
  3.  */
  4. function YOUR_THEME_NAME_preprocess_field(&$variables, $hook) {
  5. $max_delta = count($variables['items']) - 1;
  6. foreach ($variables['items'] as $delta => $item) {
  7. if ($delta == 0) {
  8. $variables['items'][$delta]['class'] = ' first ';
  9. }
  10. else if ($delta == $max_delta && $max_delta != 0) {
  11. $variables['items'][$delta]['class'] = ' last ';
  12. }
  13. else {
  14. $variables['items'][$delta]['class'] = '';
  15. }
  16. }
  17. }

После выполнения этих действий вы получите класс 'first' для первого элемента формы и 'last' для последнего.

  1. <div class="field field-name-field-test field-type-text field-label-above clearfix">
  2. <div class="field-label">Test field</div>
  3. <div class="field-items">
  4. <div class="field-item first even">1</div>
  5. <div class="field-item odd">2</div>
  6. <div class="field-item even">3</div>
  7. <div class="field-item last odd">4</div>
  8. </div>
  9. </div>
Версия Drupal: