Заменить CSS модулей своими

Главные вкладки

Аватар пользователя Andruxa Andruxa 18 декабря 2010 в 13:55

Копаю темизацию, прописать стили на морду - ничего сложного, а если задаться целью темизировать админку в общем дизайне сайта - начинают мешать таблицы стилей, подгружаемые модулями.
Каскадные стили такие каскадные...

Решения:
1. Править файлы css, которые лежат в папках с модулями - некошерно.

2. Отключить файлы CSS и прописать стили в своих CSS - они будут грузиться всегда, вне зависимоси от участия модуля в рендере страницы.

Решил заменить таблицы стилей модулей своими, используя решение с ДрупалКукБука:
в template.php своей темы в функции имя-темы_preprocess_page добавил:

  $path_to_theme = drupal_get_path('theme', 'имя-темы');
  foreach ( $vars['css']['all']['module'] as $css =>$val ){
        $vars['css']['all']['module'][$path_to_theme . '/css/' . basename($css)] = $val;
        unset($vars['css']['all']['module'][$css]);
  }
  $vars['styles'] = drupal_get_css($vars['css']);
  unset($path_to_theme);

Остается скопировать файлы CSS из папок с модулями в подпапку /css своей темы, и править их как угодно.

Недостатки - при добавлении модулей надо помнить о необходимости копирования его стилей в свою тему.
решено, вопрос - по нагрузке (я не ощутил) и кошерности кода (N лет назад кодил на vb6, php - со словарем)

Комментарии

Аватар пользователя Andruxa Andruxa 18 декабря 2010 в 17:23

"Ch" wrote:

http://drupalblog.ru/blog/pereopredelenie-css-stilei-modulei-cherez-temu...

Хорошее решение - можно править только таблицы стилей выбранных модулей, не надо копировать все CSS.
Жаль, что раньше не видел.

upd - в своем решении забыл про  $vars['styles'] = drupal_get_css($vars['css']);, исправил в топике.

Аватар пользователя Andruxa Andruxa 18 декабря 2010 в 17:38

Сделал проверку на наличие файла стиля в папке темы:

  $path_to_theme = drupal_get_path('theme', 'имя-темы');
  foreach ( $vars['css']['all']['module'] as $css =>$val ){
        $theme_css=$path_to_theme . '/css/' . basename($css);
        if (file_exists($theme_css)) {
                $vars['css']['all']['module'][$theme_css] = $val;
                unset($vars['css']['all']['module'][$css]);
        }
  }
  $vars['styles'] = drupal_get_css($vars['css']);
  unset($path_to_theme);

Теперь как с темплейтами - если есть в папке темы, берется он, если нет - дефолтный.

Интересно, насколько это увеличивает нагрузку, ведь работает при каждом рендере?

Аватар пользователя Geldora Geldora 18 декабря 2010 в 21:07

Нну, не знаю, я не профи, но...

Мне хватает "за глаза" файла локал.цсс в папке моей темы. Переписываю все через него... и все нормально работает. В крайний случай, если вы профи-темер, есть же стартовые темы типа тао, цсс-резет и т.д.

Аватар пользователя itm itm 1 февраля 2012 в 21:29

Некоторые модули предусматривают переопределение css - например Administer -> Themes -> Configure -> Global settings -> "Path to custom nice menus CSS file