drupal_add_css не работает - PullRequest
       27

drupal_add_css не работает

7 голосов
/ 11 сентября 2009

Мне нужно использовать 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>

Почему эта функция не работает?

Ответы [ 9 ]

7 голосов
/ 11 сентября 2009

Не совсем понятно, где вы выбираете шаблон, который есть в вашем примере. Если вы выбираете его из модуля, вы можете просто использовать drupal_add_css в модуле, а не в шаблоне.

Если у вас есть собственная тема, вы можете использовать template_preprocess_page и добавить туда логику, чтобы добавить соответствующий CSS (вы также можете использовать ее для выбора используемого шаблона).

6 голосов
/ 30 июня 2010

Я заметил что-то странное, и это может решить вашу проблему:

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

работает

4 голосов
/ 11 сентября 2009

Эта функция не будет работать в шаблонах. Причина в том, что переменная $ styles, которая будет содержать все html таблицы стилей, уже будет сгенерирована на этом этапе, поэтому drupal_add_css не будет работать, поскольку добавляет к этому. если вы хотите сделать это в своей теме, вам, вероятно, придется добавить файл css вручную

<link rel="stylesheet" ... />

Другой способ - использовать drupal_add_css в модуле, но вам может быть трудно добавить правильные файлы css на нужные вам страницы.

3 голосов
/ 29 октября 2009

Возможно использовать drupal_add_css () внутри вашего файла template.php; на этой странице есть хороший пример того, как это сделать.

2 голосов
/ 11 сентября 2009

Ответ был очень большим, чтобы использовать модуль CSS Injector - отличный маленький аддон!

Вот выдержка из его страницы проекта:

Позволяет администраторам вставлять CSS в вывод страницы на основе настраиваемых правил. Это полезно для добавления простых настроек CSS без изменения официальной темы сайта. CSS добавляется с использованием стандартной функции drupal_add_css () в Drupal и учитывает кэширование страниц и т. Д. Браш 2.x использует CTools, поэтому CSS может быть включен с изменениями Feature (т. Е. CSS, который улучшает внешний вид View, может быть упакован с View ).

1 голос
/ 10 марта 2011

drupal_add_css ожидает путь относительно базового пути, тогда как drupal_get_path не возвращает путь относительно базового пути.

global $base_path; <br /> drupal_add_css($base_path . drupal_get_path('module / theme','name') . "/styles/file1.css", "module / theme");

Вы можете выбрать между модулем и темой соответственно.

1 голос
/ 03 апреля 2010

Этот код внутри 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();
} 

объяснил:

  1. Аланья это название темы
  2. header_1.css - обязательный файл css.
0 голосов
/ 11 февраля 2012

Попробуйте это 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);
0 голосов
/ 11 января 2010

Спасибо за ссылку, 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(); 
...