drupal_add_css无法正常工作

问题描述 投票:7回答:9

我需要使用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>

为什么这个功能不起作用?

php drupal drupal-6
9个回答
7
投票

您在选择示例中的模板的位置并不十分清楚。如果从模块中选择它,则可以在模块中使用drupal_add_css而不是模板。

如果您有自己的主题,可以使用template_preprocess_page并在其中放置逻辑以添加相关的CSS(您也可以使用它来选择要使用的模板)。


6
投票

我注意到一些奇怪的东西,它可能会解决你的问题:

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
投票

此功能在模板中不起作用。原因是此时已经生成了将保存所有样式表html的变量$样式,因此drupal_add_css将无法正常工作。如果你想在你的主题中这样做,你可能需要手动添加css文件

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

另一种方法是在模块中使用drupal_add_css,但是您可能很难在所需的页面上添加正确的css文件。


3
投票

可以在template.php文件中使用drupal_add_css(); this page有一个如何做到这一点的好例子。


2
投票

答案是非常使用CSS Injector模块 - 伟大的小插件!

以下是其项目页面的摘录:

允许管理员根据可配置的规则将CSS注入页面输出。它可以在不修改网站官方主题的情况下添加简单的CSS调整。使用Drupal的标准drupal_add_css()函数添加CSS并尊重页面缓存等.2.x brach利用CTools,因此CSS可以包含在功能更改中(即,可以使用View打包改善View外观的CSS )。


1
投票

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. alagna是主题名称
  2. header_1.css是必需的css文件。

1
投票

drupal_add_css期望相对于基本路径的路径,而drupal_get_path不返回相对于基本路径的路径。

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

您可以相应地选择模块和主题。


0
投票

感谢您的链接,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(); 

0
投票

试试这个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);
© www.soinside.com 2019 - 2024. All rights reserved.