Sep 14, 2012 - 前端    No Comments

unset css module for drupal7

drupal做项目也4年多了,大大小小,简单的,复杂的项目做了无数。最想喷的就是drupal的css管理。就拿最基础的basci theme来举例,即便把basic.info里的css全注释掉:

页面里也还会有一堆其他module通过drupal_add_css()加进来的css,

<style type="text/css" media="all">@import url("http://ares/drupal7/modules/system/system.base.css?ma9ysv");
@import url("http://ares/drupal7/modules/system/system.menus.css?ma9ysv");
@import url("http://ares/drupal7/modules/system/system.messages.css?ma9ysv");
@import url("http://ares/drupal7/modules/system/system.theme.css?ma9ysv");</style>
<style type="text/css" media="all">@import url("http://ares/drupal7/modules/comment/comment.css?ma9ysv");
@import url("http://ares/drupal7/modules/field/theme/field.css?ma9ysv");
@import url("http://ares/drupal7/modules/node/node.css?ma9ysv");
@import url("http://ares/drupal7/modules/search/search.css?ma9ysv");
@import url("http://ares/drupal7/modules/user/user.css?ma9ysv");</style>

虽然这些css最后都可以压缩掉,但作为一个有数据洁癖的处女男,还是很难忍受这种东西存在的。
这些css其实还好,都是原生drual自带的,并没有冲突。但在项目的进行中,我们会装很多第三方的module,这些module都隶属于不同的作者,web界语意化的单词又就那么几个,css冲突就在所难免了。(其实我这是在夸自己的css命名够语意化!^^)

好吧,现在来干掉这些碍眼的家伙吧!在drupal api里搜到一个方法hook_css_alter,这可以干掉这些碍眼的家伙。

1.在sites/all/modules/ 下新建一个文件夹 unsetcss
2.在sites/all/modules/unsetcss 下建立两个文本文件:unsetcss.info 和 unsetcss.module
代码如下,unsetcss.info:

name = Unsetcss
description = Unsetcss
package = Aresli
core = 7.x
php = 5.x

unsetcss.module :

<?php
function unsetcss_css_alter(&$css) {
  // Remove defaults.css file.
  //unset($css[drupal_get_path('module', 'system') . '/system.base.css']);
  unset($css[drupal_get_path('module', 'system') . '/system.menus.css']);
  unset($css[drupal_get_path('module', 'system') . '/system.messages.css']);
  unset($css[drupal_get_path('module', 'system') . '/system.theme.css']);
  unset($css[drupal_get_path('module', 'comment') . '/comment.css']);
  unset($css[drupal_get_path('module', 'field') . '/theme/field.css']);
  unset($css[drupal_get_path('module', 'node') . '/node.css']);
  unset($css[drupal_get_path('module', 'search') . '/search.css']);
  unset($css[drupal_get_path('module', 'user') . '/user.css']);
}
?>

3.启用这个module后,就只剩下 system.base.css 这一个css了
ps: system.base.css 不能去掉,否则后台样式会乱。

我不知道drupal里有没有更好的方法干掉这些css,但作为一个前端,我只能研究到这步了。

Got anything to say? Go ahead and leave a comment!