6.6 hook_css_alter和删除的艺术 hook_css_alter and the art of delete
ok,以上讲的是怎么添加CSS文件,现在再来说说移除的方法。
(我真心忍不住要吐槽一句,Drupal这狗东西,光添加css就讲了5节。。。。好坑)
对于一个新手themer来说,比较痛苦的一件事情就是检查页面元素的时候发现那一大串的CSS文件?他们都是干嘛用的,怎么删除不需要的文件呢?类似的问题,我在大群,上海群,高级群都看到过。
现在假设我们有一个叫做evil.css的样式表,它是由evil模块提供的,我们不想要,怎么移除呢?
1. 我们当然可以在自己的样式表中覆写evil.css的内容,也可以在主题文件夹中新建一个evil.css样式表来达到同样的覆写效果。但是这个方法并没有让我们取消对原始evil.css的加载,evil还是存在,只是被覆盖了,别急,继续往下看。
2. 你可以在.info文件中加入一行声明 stylesheets[all][] = css/evil.css,但是在主题的css文件夹中没有evil.css。这样的话,drupal主题系统不会加载由模块提供的evil.css,而会试图从主题文件夹中加载它,但是由于不存在这个文件,而放弃加载。不过,这是一个投机取巧的办法,会有被人耻笑的风险,使用前需掂量一下。
3. 在template.php中通过hook_css_alter直接取消这个样式表,这是真正的drupal way:
function THEMENAME_css_alter(&$css) {
unset($css[drupal_get_path('module', 'evil') . '/evil .css']);
}
或者 如果想直接把 /modules/system/system.menus.css取消:
function THEMENAME_css_alter(&$css) {
unset($css[‘modules/system/system.menus.css’]);
}