2010-01-27 44 views
2

我在尝试添加样式表有条件地添加到我的drupal 6站点。我已将下面的代码添加到我的template.php文件中进行测试,但它不起作用。该css文件不会被添加到我的网站。drupal_add_css无法正常工作

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

此代码工作正常,当我把它放在我使用hook_init(做了一个自定义模块中),但我想我需要把它放在我的template.php文件中,我想检查我的页面。

任何帮助将不胜感激。

+0

@benmango:我更新了我的答案根据评论的澄清如下 - HTH – 2010-01-28 09:21:47

回答

3

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; 
    } 
} 

(注:未经测试的代码,错别字要小心)

+0

对不起,不是更具体的关于“页面我是”上。我想将不同的样式(背景图片和其他颜色)应用于我网站的不同部分。不同的部分通过主菜单访问,所以不同的部分将由url路径决定。例如/建议,/服务,/事件等。这有助于确定哪个地方最适合打电话吗? – Ben 2010-01-27 17:18:47

+0

非常感谢您的回答。我昨天设法创建了一个解决方案。我使用菜单路径使用预处理函数创建了自己的变量,然后将该变量添加到我的page.tpl.php。我使用这个变量作为CSS的类。我会在下面发表答案。 – Ben 2010-01-28 10:56:40

3

我把下面的代码的自定义模块,它是现在追加的CSS文件:

function defprofile_preprocess_page(&$vars) { 
drupal_add_css('sites/all/themes/ben/advice.css','theme','all',FALSE); 
$vars['styles'] = drupal_get_css(); } 
+0

的确,这就是解决方案。但是,解决方案并不在于您将其放入自定义模块中;这段代码也可以在template.php中使用。解决这个问题的关键是在添加css之后使用drupal_get_css更新$ vars ['styles']。 – marcvangend 2010-01-27 17:52:57

+0

我曾尝试将完全相同的代码(将函数名称更改为适合我的主题)放入我的template.php中,但它不起作用... – Ben 2010-01-27 17:57:58

4

我用这个代码来解决我的问题:

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

我可以再加入$奔我在page.tpl.php中基于不同的价值观来构建身体课堂并构建css课堂规则。例如如果路径是'建议',我创建一个名为'.advice'的css规则。

感谢大家的帮助,它帮助我解决了这个问题。

+2

+1用于发布后续使用的解决方案 – 2010-01-28 11:19:49