drupal_add_css не работает
Вопрос
Мне нужно использовать drupal_add_css для вызова таблиц стилей на отдельных страницах Drupal 6.Я не хочу редактировать таблицу стилей основной темы, поскольку там будет набор отдельных страниц, которым всем нужны совершенно новые стили - основной лист был бы огромным, если бы я поместил все это туда.
Мое решение состояло в том, чтобы отредактировать страницу в режиме редактора PHP и сделать это:
<?php
drupal_add_css("/styles/file1.css", "theme");
?>
<div id="newPageContent">stuff here in html</div>
Но когда я просматриваю исходный код, там ничего нет!Даже не битая CSS-ссылка или что-то в этом роде, она просто отказывается добавлять CSS-лист в CSS-пакет, помещенный в заголовок страницы.
Вариации, похоже, тоже не работают:
drupal_add_css($path = '/styles/file1.css', $type = 'module', $media = 'all', $preprocess = TRUE)
Заголовок моего шаблона выглядит следующим образом, я ничего не изменил по умолчанию, кроме добавления пользовательского JavaScript.
<head>
<?php print $head ?>
<title><?php print $head_title ?></title>
<?php print $styles ?>
<?php print $scripts ?>
<script type="text/javascript" src="<?php print base_path() ?>misc/askme.js"></script>
<!--[if lt IE 7]>
<?php print phptemplate_get_ie_styles(); ?>
<![endif]-->
</head>
Почему эта функция не работает?
Решение 5
Ответом было очень много, чтобы использовать модуль CSS Injector - отличное небольшое дополнение! Р>
Вот выдержка из его страницы проекта:
Позволяет администраторам внедрять CSS в вывод страницы на основе настраиваемых правил. Это полезно для добавления простых настроек CSS без изменения официальной темы сайта. CSS добавляется с использованием стандартной функции drupal_add_css () в Drupal и учитывает кэширование страниц и т. Д. Браш 2.x использует CTools, поэтому CSS может быть включен с изменениями Feature (т. Е. CSS, который улучшает внешний вид View, может быть упакован с View ). р>
Другие советы
Не совсем понятно, где вы выбираете шаблон, который есть в вашем примере. Если вы выбираете его из модуля, вы можете просто использовать drupal_add_css в модуле, а не в шаблоне.
Если у вас есть собственная тема, вы можете использовать template_preprocess_page и вставить логику в туда, чтобы добавить соответствующий CSS (вы также можете использовать его, чтобы выбрать шаблон для использования).
Я заметил что-то странное, и это может решить вашу проблему:
drupal_add_css( drupal_get_path('theme','themname') . '/working.css','module' ,'all' , false );
drupal_add_css( drupal_get_path('theme','themname') . '/path/to/folder/notworking.css','module' ,'all' , false );
Первый из них будет работать, потому что его стиль находится в главной папке Вторая строка не будет работать, потому что стиль находится в подпапке!
Изменить.
Я думаю, что это не сработало, потому что я не написал путь к файлу стиля должным образом: S, поэтому, пожалуйста, не обращайте внимания на мой ответ
drupal_add_css( drupal_get_path('theme','test') . '/pages/subpage/style.css','theme');
работает
Эта функция не работает в шаблонах. Причина в том, что переменная $ styles, которая будет содержать все html таблицы стилей, уже будет сгенерирована на этом этапе, поэтому drupal_add_css не будет работать, так как добавляет к этому. если вы хотите сделать это в своей теме, вам, вероятно, придется добавить файл css вручную
<link rel="stylesheet" ... />
Другой способ - использовать drupal_add_css в модуле, но вам может быть трудно добавить правильные css-файлы на нужные вам страницы.
Возможно использовать drupal_add_css () в вашем файле template.php; на этой странице есть хороший пример того, как это сделать. р>
Этот код внутри template.php работает для меня:
function alagna_preprocess_page(&$vars) {
drupal_add_css(path_to_theme() . '/header_1.css', 'theme');
$vars['css'] = drupal_add_css();
$vars['styles'] = drupal_get_css();
}
объясненный:
- аланья - это название темы
- header_1.css - это необходимый файл css.
drupal_add_css ожидает путь относительно базового пути, тогда как drupal_get_path не возвращает путь относительно базового пути.
<код>
глобальный $ base_path;
drupal_add_css ($ base_path. drupal_get_path ('module / theme', 'name'). " /styles/file1.css" ;, " module / theme ");
Код>
Вы можете выбрать между модулем и темой соответственно.
Спасибо за ссылку, wyrmmage. Это очень полезно. Я думаю, что остальная часть кода на странице не нужна. Возможно, они вам просто нужны, так как drupal 6 уже автоматически проверяет существование файла:
drupal_add_css(path_to_theme() . '/css/yourcss.css', 'theme');
// Add the following to regenerate $styles.
// This is needed for template_preprocess_page() since css is already generated at this point.
$variables['styles'] = drupal_get_css();
Попробуй это common.inc drupal_get_css($css = NULL)
Параметры
$css:(необязательно) Массив файлов CSS. Если массив не указан, вместо него используется массив таблиц стилей по умолчанию.
$css = $vars['css'];
// unset the system css files
$unset_css = array
'modules/system/system.css',
'modules/system/system-menus.css',
);
foreach($unset_css as $css_f) {
if(isset($css['all']['module'][$css_f])) {
unset($css['all']['module'][$css_f]);
}
}
// add css
$css['all']['theme'][drupal_get_path('theme', 'openpublish_theme') . '/css/style.css'] = true;
$vars['styles'] = drupal_get_css($css);