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

drupal_add_css не работает

2 голосов
/ 27 января 2010

Я пытаюсь условно добавить таблицы стилей на свой сайт drupal 6. Я добавил следующий код в мой файл template.php, чтобы проверить его, и он не работает. Файл css не добавляется на мой сайт.

function ben_preprocess_page(&$vars) {
drupal_add_css('/sites/all/themes/ben/advice.css','theme','all',FALSE);}

Этот код отлично работает, когда я помещаю его в пользовательский модуль, который я сделал с помощью hook_init (), но я думаю, что мне нужно поместить его в мой файл template.php, так как я хочу проверить страницу, на которой я нахожусь.

Любая помощь будет высоко ценится.

Ben

Ответы [ 3 ]

4 голосов
/ 28 января 2010

Я использовал этот код для решения своей проблемы:

function ben_preprocess_page(&$vars) {
        $alias=drupal_get_path_alias($_GET['q']);
        $alias=explode('/',$alias);
        $vars['ben'] = $alias[0]; } 

Затем я могу добавить $ ben в свой page.tpl.php внутри класса body и создать правила класса css, основанные на различных значениях. например Если путь - «совет», я создаю правило css под названием «.advice».

Спасибо за помощь всем, это помогло мне решить проблему.

Ben

3 голосов
/ 27 января 2010

Я поместил следующий код в пользовательский модуль, и теперь он добавляет файл CSS:

function defprofile_preprocess_page(&$vars) {
drupal_add_css('sites/all/themes/ben/advice.css','theme','all',FALSE);
$vars['styles'] = drupal_get_css(); }
3 голосов
/ 27 января 2010

IIRC, ссылки на таблицы стилей уже были обработаны при вызове функций *_preprocess_page() и созданная разметка помещена в $variables['styles']. Так что уже поздно использовать drupal_add_css().

Вы можете либо собрать разметку <link ...> для своих дополнений и добавить ее к $variables['styles'], либо вам нужно найти лучшее место для вашего звонка на drupal_add_css() ранее в цепочке обработки (возможно, из модуля ).

Что это за место, трудно сказать, не зная, что именно вы подразумеваете под «проверь страницу, на которой я нахожусь», но если мы говорим о страницах узлов, hook_nodeapi() будет кандидатом .


ИЗМЕНИТЬ после уточнения в комментариях: Если решение о том, какие таблицы стилей добавить, основано только на пути, то hook_init (в пользовательском модуле) будет подходящим местом для этого, так как после этого путь не изменится. Единственный хитрый момент в этом случае - получить чистые URL. Если (как я предполагаю) вы используете чистые URL-адреса, вы не можете использовать arg(0) для получения первого элемента пути, так как он будет возвращать первый элемент внутреннего пути Drupal (например, «узел»). для узловых страниц). Таким образом, вы должны сначала получить чистую версию URL:

// Get current path alias, if any (will return original path, if no alias set)
$path = drupal_get_path_alias($_GET['q']);
// Extract first element
$path_elements = explode('/', $path);
// Do we have at least one element?
if (0 < count($path_elements) {
  // Yes, add stylesheet based on that
  switch ($path_elements[0]) {
    case 'advice':
      drupal_add_css('path/to/advice.css');
      break;
    case 'services':
      drupal_add_css('path/to/services.css');
      break;
    // TODO: Add other variations ...
    default:
      // Might add a default alternative here
      break;
  }
}

(ПРИМЕЧАНИЕ: непроверенный код, остерегайтесь опечаток)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...