1. Главная
  2. Блоги
  3. Блог g78knl6cvxf0

Отключение css для определенных пользователей

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

Кроме стилей из темы в друпале подключается еще пара (削除) десятков (削除ここまで) других стилей, связанных с модулями и самой системой. И если администратору они нужны, то пользователь прекрасно обойдется и без них (ведь так?).

В 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);

}

?>

Есть замечания, предложения? Буду рад услышать

Комментарии

Аватар пользователя enemis enemis 15 января 2012 в 2:50

А зачем это делается?
Я думал если включенно оптимизация CSS то все пакуется в один файл и отсылается user один раз?
Не пойму у вас там что стилей 100500? Или вы уверены что этот прием разгрузит сервер?. Вообще что вы пытаетесь добиться отключением админских стилей?
Я допустим в админке использую те же стили что и на сайте...

Аватар пользователя g78knl6cvxf0 g78knl6cvxf0 15 января 2012 в 11:09

Для Айдара: пожалуйста. Работает.

Для enemis:
Я уверен, что чем меньше лишнего отправлять пользователю, тем лучше. И не важно, сильно это разгрузит сервер, ускорит загрузку, сделает более стабильной верстку (которую верстальщик так долго делал без учета других стилей) или нет.

А еще, когда верстальщик смотрит на код, и видит вместо своих 4 стилей еще 20 (削除) чужих (削除ここまで) стилей, то расстраивается)

Другой вопрос, вылезет ли такое отключение боком или нет. Поэтому если есть такой опыт, пожалуйста поделитесь.

Аватар пользователя enemis enemis 15 января 2012 в 15:01

Я не уверен так как я такими извращениями не пользуюсь. Вот некоторые мои мысли:

1. Если вам даже удастся отключать (в чем я не уверен) то при включении оптимизации сайта(рекомендую делать всегда[конечно есть более лучшие решения] производительность увеличивается) система пробежит по всем модулям и включит только те css которые нужны, те если у вас css используется только для usera или одмина, то в результирующем файле у вас будут все равно оба как вы бы не старались.
2. если вам кажется что много стилей убирайте лишнее у меня для сайта в среднем выходит от 800-1000 строк но я не использую шаблоны.
3. Выгоняйте с работы такого не уравновешенного верстальщика :), потому что у друпала каждый модуль может формировать свои стили, поэтому нужно уметь их либо отключать сразу(не рекомендую много в них хорошего) либо уметь переопределять их.

Аватар пользователя g78knl6cvxf0 g78knl6cvxf0 15 января 2012 в 21:10

enemis, большое спасибо за проявленный интерес. Я пока не силен в этой теме и возможно действительно совершаю глупость. Поэтому, если можно, уточнить пару моментов.

Оптимизация - это включение агрегации css или что-то другое? Потому что при включенной агрегации данный метод работает нормально.

т.е. стили были собраны по группам, администратор получает их все, пользователь, только группу CSS_THEME (которая и была для него оставлена)

«конечно есть более лучшие решения»

пожалуйста, раз уж обозначили что есть, скажите какое?

Аватар пользователя enemis enemis 16 января 2012 в 0:58

Читайте о cacherouter, boost для снижение нагрузки за счет кеширования... Sphinx сишный поиск снижает нагрузку... Devel позволяет смотреть сложные запросы... Отказавшись от views и panels повысится производительность, можно посмотреть в devel на сколько. И хаки ядра для самых суровых оптимизаторов, смотрим в девеле где много кушает и прокладываем другой путь... Я последней херней не занимаюсь, так как супер высоконагруженные проекты еще не делал...

Аватар пользователя alexandr.poddubsky alexandr.poddubsky 2 марта 2012 в 13:59

"vaplas" wrote:
Еще раз большое спасибо!)

нормально.никого не слушай. Первое правило- что можно удалить - удаляй, что можно закэшировать -кэшируй, используй всегда форк. Меньше мусора , шустрее сайт. Некоторым конечно нравятся комбайны трактора, но мне больше по душе самолеты.

Логотип drupal.ru

Содержимое сайта публикуется на условиях CreativeCommons Attribution-ShareAlike 3.0 или более поздней версии. Программные коды в тексте статей — на условиях GNU GPL v2 или более поздней версии.

Документация по совместной работе с репозиторием drupal.ru – https://docs.drupal.ru/code

Drupal – торговая марка Дриса Бёйтарта

12+

AltStyle によって変換されたページ (->オリジナル) /