Кроме стилей из темы в друпале подключается еще пара десятков других стилей, связанных с модулями и самой системой. И если администратору они нужны, то пользователь прекрасно обойдется и без них (ведь так?).
В 7-ой версии это делается с помощью hook_css_alter.
Беда только в том, что почему-то везде где я видел этот прием, стили отключаются для всех - и админов и пользователей.
Но ведь пользователи не равны!
И если админу нужно оставить стиль модуля Administration menu, то зачем из-за этого страдать пользователю (или наоборот).
Ну для 6-ки дополнительную проверку включить не сложно, потому что там все переменные под рукой.
В используемом хуке 7-ки сразу доступна только переменная со стилями, и чтобы узнать текущего юзера нужна еще одна строка, ради которой это всё и пишу). Итак:
<?php
function THEME_css_alter(&$css) {
global $user; //ну впринципе и всё, дальше дело техники)
//можно проверить пользователя по роли $user->roles;
$roles = $user->roles;
$admin = false;
foreach ($roles as $key => $value) {
if($value == "administrator") {
$admin=true;
break;
}
}
//или $user->name (для незарегистрированных отсутствует)
if(isset($user->name) && $user->name=="admin"){
$admin=true;
}
//само отключение подробно описано в ссылке, приведенной в самом начале, но для полноты картины
//способ 1
$exclude = array(
drupal_get_path('module','system').'/system.base.css',
drupal_get_path('module','system').'/system.menus.css'
//....
);
foreach (
$exclude as $css_file) {
unset($css[$css_file]);
}
//способ 2
$exclude = array(
'modules/system/system.base.css' => FALSE,
'modules/system/system.menus.css' => FALSE,
//..
);
$css = array_diff_key($css, $exclude);
//вот еще, для суровых ребят
foreach ($css as $key => $value) {
if ($value['group'] != CSS_THEME) {
$exclude[$key] = FALSE;
}
}
$css = array_diff_key($css, $exclude);
}
?>
Есть замечания, предложения? Буду рад услышать
Комментарии
Спасибо! В закладки.
А с включенной агрегацией тоже сработает?
А зачем это делается?
Я думал если включенно оптимизация CSS то все пакуется в один файл и отсылается user один раз?
Не пойму у вас там что стилей 100500? Или вы уверены что этот прием разгрузит сервер?. Вообще что вы пытаетесь добиться отключением админских стилей?
Я допустим в админке использую те же стили что и на сайте...
Для Айдара: пожалуйста. Работает.
Для enemis:
Я уверен, что чем меньше лишнего отправлять пользователю, тем лучше. И не важно, сильно это разгрузит сервер, ускорит загрузку, сделает более стабильной верстку (которую верстальщик так долго делал без учета других стилей) или нет.
А еще, когда верстальщик смотрит на код, и видит вместо своих 4 стилей еще 20
чужихстилей, то расстраивается)Другой вопрос, вылезет ли такое отключение боком или нет. Поэтому если есть такой опыт, пожалуйста поделитесь.
Я не уверен так как я такими извращениями не пользуюсь. Вот некоторые мои мысли:
1. Если вам даже удастся отключать (в чем я не уверен) то при включении оптимизации сайта(рекомендую делать всегда[конечно есть более лучшие решения] производительность увеличивается) система пробежит по всем модулям и включит только те css которые нужны, те если у вас css используется только для usera или одмина, то в результирующем файле у вас будут все равно оба как вы бы не старались.
2. если вам кажется что много стилей убирайте лишнее у меня для сайта в среднем выходит от 800-1000 строк но я не использую шаблоны.
3. Выгоняйте с работы такого не уравновешенного верстальщика :), потому что у друпала каждый модуль может формировать свои стили, поэтому нужно уметь их либо отключать сразу(не рекомендую много в них хорошего) либо уметь переопределять их.
enemis, большое спасибо за проявленный интерес. Я пока не силен в этой теме и возможно действительно совершаю глупость. Поэтому, если можно, уточнить пару моментов.
Оптимизация - это включение агрегации css или что-то другое? Потому что при включенной агрегации данный метод работает нормально.
т.е. стили были собраны по группам, администратор получает их все, пользователь, только группу CSS_THEME (которая и была для него оставлена)
«конечно есть более лучшие решения»
пожалуйста, раз уж обозначили что есть, скажите какое?
Читайте о cacherouter, boost для снижение нагрузки за счет кеширования... Sphinx сишный поиск снижает нагрузку... Devel позволяет смотреть сложные запросы... Отказавшись от views и panels повысится производительность, можно посмотреть в devel на сколько. И хаки ядра для самых суровых оптимизаторов, смотрим в девеле где много кушает и прокладываем другой путь... Я последней херней не занимаюсь, так как супер высоконагруженные проекты еще не делал...
Еще раз большое спасибо!)
нормально.никого не слушай. Первое правило- что можно удалить - удаляй, что можно закэшировать -кэшируй, используй всегда форк. Меньше мусора , шустрее сайт. Некоторым конечно нравятся комбайны трактора, но мне больше по душе самолеты.
о, спасибо! Про форк красиво сказанул)