我需要使用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>
为什么这个功能不起作用?
您在选择示例中的模板的位置并不十分清楚。如果从模块中选择它,则可以在模块中使用drupal_add_css而不是模板。
如果您有自己的主题,可以使用template_preprocess_page并在其中放置逻辑以添加相关的CSS(您也可以使用它来选择要使用的模板)。
我注意到一些奇怪的东西,它可能会解决你的问题:
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');
工作中
此功能在模板中不起作用。原因是此时已经生成了将保存所有样式表html的变量$样式,因此drupal_add_css将无法正常工作。如果你想在你的主题中这样做,你可能需要手动添加css文件
<link rel="stylesheet" ... />
另一种方法是在模块中使用drupal_add_css,但是您可能很难在所需的页面上添加正确的css文件。
可以在template.php文件中使用drupal_add_css(); this page有一个如何做到这一点的好例子。
答案是非常使用CSS Injector模块 - 伟大的小插件!
以下是其项目页面的摘录:
允许管理员根据可配置的规则将CSS注入页面输出。它可以在不修改网站官方主题的情况下添加简单的CSS调整。使用Drupal的标准drupal_add_css()函数添加CSS并尊重页面缓存等.2.x brach利用CTools,因此CSS可以包含在功能更改中(即,可以使用View打包改善View外观的CSS )。
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();
}
解释:
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");
您可以相应地选择模块和主题。
感谢您的链接,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();
试试这个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);