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

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

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

这让我抓狂,Drupal 因其灵活性而被其他人选择。先感谢您。

有帮助吗?

解决方案

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

我相信您知道如何排除所有这些;)

其他提示

如果你在你的主题定义CSS和/或JavaScript文件的.INFO使用匹配的核心文件的文件名的文件,那么你覆盖它们,如果你的覆盖不存在,那么他们是不包括在内。

参见陶主题的示例的.info文件

我不这样会工作,但我认为只是删除下面一行在你的主题的page.tpl.php中 结果

 <?php echo $styles ?>

然后Drupal将没有任何自己的风格..结果 这可能是你的工作。


尼茨结果,

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top