9

我正在努力完成以下工作。我需要使用 Drupal 6 作为项目要求,但我想将它与我自己的 HTML 和 CSS 样式表一起用于每个节点/视图/面板等。

问题是,无论主题是什么,我总是发现 Drupal 适用于我的 HTML 内容,包括我的 CSS 样式表和与所选主题相关的 CSS。我也尝试过使用样式剥离器模块(安装在站点/所有/模块中),但没有成功。无论我做什么,额外的 CSS 样式表都会应用到我的页面上,完全破坏了我的布局。

实现这一目标的正确方法是什么?为什么样式剥离器根本不起作用?是否有完全空白的主题可用?我尝试过 basic、mothership、zen 等,但我总是看到附加的 CSS 样式表应用于我的页面。

这让我发疯,Drupal 因其灵活性而被其他人选中。先感谢您。

4

3 回答 3

6
<?php
/**
 * Helper function to allow easy CSS excludes + includes
 */
function _phptemplate_get_css($exclude = array(), $include = array()){
$css = drupal_add_css();
foreach ($css['all']['module'] as $k => $path) {
   $file = substr($k, strrpos($k, '/') + 1);
   if (in_array($file, $exclude)){
     unset($css['all']['module'][$k]);
   }
}
foreach ($include as $file){
   $css['all']['theme'][path_to_theme() .'/'. $file] = true;
}
return drupal_get_css($css);
?>

在drupal.org上阅读更多内容。

更新:
放置此功能的正确位置是在template.php您的主题文件中。实际上,在您的情况下,您需要传递要排除的 css 文件名数组。
没有传递参数的调用drupal_add_css()将提供$css一组 CSS 文件,这些文件将附加到您的主题中。所以现在是入场的好时机!

如您所见,在第一个foreach循环中,我们只是在$css数组中查找传递数组中存在的文件名$exclude,以删除样式。我们在第二个循环中为样式插入做同样的工作。最后,我们返回所有样式的主题表示,这些样式应该使用drupal_get_css()函数附加到主题。(在你的情况下可能没有)

那么,在哪里调用这个函数呢?_phptemplate_variables()您可以在D5 或YOUR_THEME_preprocess()D6中调用此辅助函数。正如我们在 D6 (未经测试)中看到的那样:

function YOUR_THEME_preprocess(&$vars, $hook){
    // Stylesheet filenames to be excluded.
    $css_exclude_list = array(
        'lightbox.css',
        'lightbox_lite.css',
    );

    // Making use of previously defined helper function.
    $vars['styles'] = _phptemplate_get_css($css_exclude_list);
}

我相信你知道如何排除他们所有;)

于 2010-02-27T08:51:42.430 回答
1

如果您在主题的 .info 文件中使用与核心文件匹配的文件名定义 CSS 和/或 JavaScript 文件,则您将覆盖它们,如果您的覆盖不存在,则它们不包括在内。

有关示例,请参阅 Tao 主题的 .info 文件

于 2011-09-26T09:07:23.130 回答
0

我不这样做会起作用,但我认为只需删除主题 page.tpl.php 中的以下行

 <?php echo $styles ?>

然后drupal不会有任何自己的风格..
这可能对你有用。


尼兹

于 2010-04-29T22:39:32.987 回答