→ Переопределение CSS стилей модулей через тему оформления

Я много раз сталкивалась с тем, что стили некоторых модулей нужно немного править, чтобы они соответствовали дизайну, тем более, если в вашей теме переписаны выводы стандартных функций. Править CSS файл прямо в папке модуля – не резонно, так как при очередной смене версии модуля файл стилей так же заменится и придется ещё раз делать все изменения. (!)

Подключение CSS модуля через файл темы тема.info не есть правильно. Так как там мы не сможем проверить включен ли модуль и существует ли он вообще, ну мало ли – отвалился. Улыбка Поэтому этот вариант сразу убираем.

Как переопределить CSS стили модуля через тему

Нам нужно чтобы стили грузились только один раз и чтобы грузились только наши css стили, и, только если модуль включен. К чему нам лишнее? Чтобы каждый раз, при обновлении модуля не править стили модуля, нужно перенести эти файлы в папку с вашей темой и подключить их через template.php вашей темы. Для этого:

  • скопируйте стили модуля в папку с вашей темой и сделайте в них все необходимые изменения;
  • откройте файл template.php и добавьте туда строки (на примере 'admin_menu.css' и 'forum.css'):
    /**
     * Add custom CSS
     */

    // проверяем включен ли модуль ‘admin_menu’
    if (module_exists('admin_menu')) {
      // добавляем файл стилей admin_menu.css
      drupal_add_css(path_to_theme('theme', 'название_темы') . '/admin_menu.css', 'theme', 'all', TRUE);
    }
    // проверяем включен ли модуль ‘forum’
    if (module_exists('forum')) {
      // добавляем файл стилей forum.css
      drupal_add_css(path_to_theme('theme', 'название_темы') . '/forum.css', 'theme', 'all', TRUE);
    }
    // возвращаем наши переопределенные стили
    $styles = drupal_get_css();
  • Сохраните.

То есть, при отключении модуля его файл CSS грузится не будет.

Очистите кеш друпала и обновите страницу в браузере (так же без кеша). Проверьте, теперь грузятся только ваши измененные стили.

ПРИМЕЧАНИЯ:

  1. Если у вас включено сжатие файлов CSS на странице «Производительность» (admin/settings/performance), то атрибут TRUE добавляйте, только, когда вы полностью закончили изменение CSS файла. В противном случае, из-за drupal-кеширования, новые изменения могут применяться не сразу. И не забывайте чистить кеш.
  2. Если файле template.php темы есть такая строка: global $theme_path;, то вместо path_to_theme('theme', 'название_темы') можете использовать $theme_path.

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

RSS-материал

12 Комментариев [Нет новых]

Аватар пользователя Ch
Подключение CSS модуля через файл темы тема.info не есть правильно. Так как там мы не сможем проверить включен ли модуль и существует ли он вообще, ну мало ли – отвалился.EllECTRONC

Я всегда так делаю. И почему, интересно мы не можем проверить включен модуль или нет если мы их сами включаем в админке?

Аватар пользователя EllECTRONC

Одно дело смотреть в админке, отвалился модуль или нет и другое, это сделается «само». А модули, хоть и редко, но имеют шанс отвалиться. Оно, конечно, ничего страшного в лишних километрах CSS кода, который будет мотаться зазря и все же… подключение CSS файлов через template.php считается хорошим тоном, вот и все.

Да и удобнее, имхо.

К тому же не придется делать лишних движений, если модуль отвалился или мы забыли и отключили его, тем более, если через тему подключено с десяток файлов или больше. А при подключении CSS таким образом можно без лишних хлопот отключить модуль в админке, например, на время… или совсем и не вспоминать про правку файла тема.info. Плюс, в условие можно вписать не только проверку на «наличие» модуля, а также, задать путь, по которому выводить данный CSS файл, например, только при добавлении/редактировании материала и т.д.

Аватар пользователя Ch
А модули, хоть и редко, но имеют шанс отвалиться. EllECTRONC

Ну что значит «отваливаться»? Если на сайте начинает что то отваливаться, то надо принимать какие то серьезные меры, а не заниматься отключением CSS файлов. Улыбка

Аватар пользователя EllECTRONC

Как правило модули «отваливаются» при обновлениях… и бывает, что не сразу можно заметить, что «чего-то» не хватает. Подмигивание

Аватар пользователя Ch

Все равно это не рационально, можно наверно, сделать как то попроще.
Например, обработать в цикле $vars['css'] чтобы убрать/заменить некоторые CSS файлы не вызывая каждый раз drupal_add_css.
Или хотя бы вместо многократного вызова module_exists, сохранить все загруженные модули в массив с помощью module_list.

Аватар пользователя EllECTRONC

Интересный вариант, надо будет попробовать.

Аватар пользователя Гость_Михаил

А что же с файлами css самих модулей. Они же будут загружаться наряду и с этими из темы. Так что решение неверное.

Аватар пользователя EllECTRONC

В том то и дело, что файлы самих модулей грузится не будут. Если вы подключаете файл модуля через тему, то от модуля он уже не грузится — это предусмотрено друпалом. Подмигивание

Аватар пользователя Гость_Михаил

каким образом?
Если в модуле(в шаблоне или в хуке) добавляем css через drupal_add_css, то они сами оттуда не уберутся. Чтобы его убрать надо в функциях препроцесса темы пересобирать переменную $styles.
Принцип работы виден также в модуле jquery_update - только для скриптов.
Оно конечно может и будет работать - т.к. из файлов темы стили будут по док-ту ниже чем стили от модуля и переопределят. Но посмотрите по html-у - старые подключаются же?

p.s. Запостить комент тут - проблема. Капча работает неверно. После ошибки формы(ссылку с примером нельзя добавить - с drupal.ru) капча не обновляется и на это потом ругается

Аватар пользователя EllECTRONC

Вот как-то так… Подмигивание

// пересобираем $styles, чтобы в нее добавились указанные нами файлы стилей
$styles = drupal_get_css();

(!) Если имена файлов оригинальные, то будут грузится только CSS файлы указанные в теме (положить их можно хоть в files), приоритет у них будет выше.

Начиная с D-6.3, можно переопределять файлы через файл тема.info (только без дополнительных условий, кому они не нужны — самое оно)

Но посмотрите по html-у - старые подключаются же?Гость_Михаил

Вы думаете я ни разу не смотрела?

p.s. Да, незарегистрированные пользователи не могут добавлять ссылки. Про капчу знаю, после перезагрузки формы она не обновляется. Грустный

Аватар пользователя Максим
(!) Если имена файлов оригинальные, то будут грузится только CSS файлы указанные в теме (положить их можно хоть в files), приоритет у них будет выше.— автор не указан

Сделал все по вашей методе на D-5.23. Новые файлы css добавились. Однако старые не удалились.

Аватар пользователя EllECTRONC

В метках к этой записи нет метки «drupal 5». Это потому что с D5 не опробован данный метод… там по-другому как-то.

Что ты об этом думаешь?

МультиВход
ИЛИ

Комментарии