代码之家  ›  专栏  ›  技术社区  ›  Ben

drupal_add_css不工作

  •  2
  • Ben  · 技术社区  · 14 年前

    我正在尝试有条件地将样式表添加到Drupal6站点。我在template.php文件中添加了以下代码来测试它,但它不起作用。css文件未添加到我的网站。

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

    这段代码在我使用hook_in it()创建的自定义模块中运行良好,但我想我需要将它放在template.php文件中,因为我想检查我所在的页面。

    任何帮助都将不胜感激。

    3 回复  |  直到 9 年前
        1
  •  3
  •   Alp    12 年前

    iirc,样式表链接已经在 *_preprocess_page() 函数被调用,生成的标记被放置在 $variables['styles'] . 所以要迟用 drupal_add_css() 到那时。

    你可以把 <link ...> 自己为添加的内容添加标记并将其附加到 $variables['styles'] ,或者你需要找一个更好的地方 drupal_add_css() 在处理链的早期(可能来自模块内)。

    如果不知道你说的“检查我所在的页面”到底是什么意思,很难说是什么地方,但是如果我们讨论的是节点页面, hook_nodeapi() 会成为候选人。


    在评论中澄清后编辑: 如果要添加哪些样式表的决定仅基于路径, hook_init (在自定义模块中)将是执行此操作的适当位置,因为路径在此之后不会更改。在这种情况下,唯一“棘手”的地方就是获取干净的url。如果(我假设)使用干净的url,则不能使用 arg(0) 获取路径的第一个元素,因为它将返回drupal的第一个元素 内部路径 (例如,“node”表示节点页)。因此,您必须先获得干净的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;
      }
    }
    

    (注:未经测试的代码,请注意拼写错误)

        2
  •  4
  •   Ben    14 年前

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

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

    然后,我可以将$ben添加到body类中的page.tpl.php中,并基于不同的值构建css类规则。例如,如果路径是“advice”,我会创建一个名为“.advice”的css规则。

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

        3
  •  3
  •   Ben    14 年前

    我把下面的代码放在一个自定义模块中,现在它正在追加css文件:

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