воскресенье, 14 августа 2011 г.

CSS injection

Некоторые сайты работают на многотемности, хотя фактически вся проблема сводится к тому, что просто какие-то классы для каких-то страниц должны определятся по разному.
Например, на одной странице фон должен быть одного цвета, а на других(или другой) - другого цвета.
Использовать шаблоны типа page-node-id.tpl.php тут совсем не к месту, модуль Themekey решает задачу, но создает сложности из-за кучи практически одинаковых тем. На помощь пришла идея с css injection.
Почитав в интернете несколько статей стало ясно, что в зависимости от урла можно подгружать различные css. Для этого мы должны написать соответствующую функцию в template.php
Но, во-первых, не все программисты, а во вторых - мне показалось это не гибко.
И тут нашелся модуль CSS Injector.
Суть модуля такова: в административной панеле, в настройках модуля вы указываете какой css код должен прогружаться на каких страницах. Определение страниц для кода такое же как и у блоков, поэтому сложностей не вызовет. Указанные стили записываются в отдельный файл, который уже инклюдится в head на выбранной странице.
Знали бы вы сколько бы времени я сэкономил, если бы нашел это решение раньше...
Если у кого-то будет проблема, что в head поялвяется инклюд, но в то же время пути в созданному css не корректны, то рекомендую сразу же воспользоватсья патчем (в файле css_injector.module строки с - удаляем, с + вставляем):
function _css_injector_rule_path($crid) {
if (!empty($crid)) {
- $local_path = drupal_realpath(_css_injector_rule_uri($crid));
- // Now remove the part before the drupal root.
- // The +1 gets rid of the leading '/'.
- $local_path = substr_replace($local_path, '', 0, strlen(DRUPAL_ROOT) + 1);
- return $local_path;
+ return variable_get('file_public_path', conf_path() . '/files') . '/css_injector/css_injector_' . $crid . '.css';
}
return NULL;
}

Комментариев нет:

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