xandeadx.ru Блог музицирующего веб-девелопера

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

Опубликовано в

По умолчанию каждое поле содержит набор из нескольких дефолтных 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
Похожие записи

Комментарии RSS

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

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

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

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

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

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

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

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

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

только я вместо
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;
}

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании