Drupal → Удаление лишних CSS классов у полей

12.10.2012

По умолчанию каждое поле содержит набор из нескольких дефолтных CSS классов — field field-name-[field_name] field-type-[field_type] field-label-[label_display]. 3 класса тут явно лишних, а четвёртый — field-name-[field_name], неплоха бы выводить в виде [field_name]. Исправляем ситуацию:

/**
 * Preprocess function for field.tpl.php
 */
function THEMENAME_preprocess_field(&$vars) {
  // Remove classes
  $remove_classes = array(
    'field',
    'field-name-' . $vars['field_name_css'],
    'field-type-' . $vars['field_type_css'],
    'field-label-hidden',
    'field-label-above',
  );
  $vars['classes_array'] = array_diff($vars['classes_array'], $remove_classes);
  
  // Add class
  array_unshift($vars['classes_array'], $vars['field_name_css']);
}

Код используется в моей базовой теме.

Написанное актуально для
Drupal 7
Похожие записи

Комментарии

привет
а скажите как скрывать лейблы у полей которые пустые, а то они отображаются

xandeadx, спасибо за лайфхак.

Юрий, а в чем проблема проверять не пустое ли поле, и не выводить его просто?

    <?php if(isset($content['field_name'])): ?>
    <?php print render($content['field_name']); ?>
    <?php endif; ?>

проблема в том что не хочется писать код и темизировать кучу полей

Я обычно использую mytheme_field(), скопировав логику из дефолтной функции темизации и заменив необходимое. Да и пожалуй такое решение рабтает быстрее.
Кроме того можно разные филды темизировать по-разному по field_name

А как быть, если тема не использует файл field.tpl.php ?

Гость
06.09.2013, 00:13

Не очень понятно, как скачать Ваш базовую тему. Не могли бы Вы дать прямую ссылку, чтобы в ней посмотреть код убирания лишних css классов?

Пинджае
28.05.2014, 09:29

Гигантское спасибо. Куча невнятных стилей - чуть ли не самая бесявая для меня вещь в Друпале. Была )
Заюзал этот препроцессор, у вьюх тоже убрал.

только я вместо
array_unshift($vars['classes_array'], $vars['field_name_css']);
использовал
array_unshift($vars['classes_array'], <strong>'field-'.</strong>$vars['field_name_css']);
всё же нужно в классе указывать принадлежность к полю. А то в случае, например, с Body получается двусмысленно.

А как быть, если тема не использует файл field.tpl.php ?

Я обычно использую mytheme_field()

в template.php

function mytheme_field($vars){
  $output = '';

  switch ($vars['element']['#field_name']){
    case 'body':
      $output = '<div class="field field-body">' . drupal_render($vars['items'][0]) . '</div>';
      break;

    default:
      $output = theme_field($vars);
  }

  return $output;
}

Добавить комментарий