标签归档:clientscript

Yii-EClientScript 扩展,支持 css/js 智能合并压缩,支持 IE 兼容条件判断

在用 yii 做一个项目过程中,把自己以前写的 eclientscript 扩展翻了出来,发现有人帮我升级成 1.4 了,:)

这个扩展是 2010 年写的了,主要是可以智能合并通过 Yii::app()->clientScript 注册的 js,css 文件,从而减轻服务器负载提高性能,更主要的是这一切全部是隐式进行的,无需使用者过度的注意什么。

我在项目中整合运用 bsie 和 Yii-Booster,这就碰到一个比较烦恼的问题需要用 IE 特有的条件判断去加载 IE6 的 css/js 补丁。一来不愿意写死进模板文件,二来和 yii 自动处理输出的会应该有优先关系问题。于是仔细考虑了一下就简单改进了一下 eclientscript 来支持这个功能。原理就是注册 css 时把 media 指定为 IE 的条件语句,注册 js 时则在 htmlOptions 里加入 media = … ;最终在页面输出时通过正则将他们替换掉。(实现完这个后发现 yii 的一个 BUG,当 scriptFile 的 htmlOptions 不为空时,执行 remapScripts 将出错,已提交 pull request)

EClientScript 扩展下载:http://www.yiiframework.com/extension/eclientscript/

条件判断用法示范,兼容性还行。

$cs = Yii::app()->clientScript;

// result to: <--[if lt IE 9]><script src="/js/html5.js"><![endif]-->
$cs->registerScriptFile('/js/html5.js', CClientScript::POS_HEAD, array('media' => 'lt IE 9'));

// result to: <!--[if lte IE 6]><link rel="stylesheet" type="text/css" href="bootstrap/css/ie.css" /><![endif]-->
$cs->registerCssFile('/css/ie.css', 'lte IE 6');