您的位置:首页 > 编程语言 > PHP开发

YII 使用modules下的css,js,img

2014-09-21 17:55 176 查看
用YII assets

1.assets的作用是方便模块化,插件化的,一般来说出于安全原因不允许通过url访问protected下面的文件,但是我们又希望将module单独出来,所以需要使用发布,即将一个目录下的文件复制一份到assets下面方便通过url访问

1 首先把自己开发模块用到的 css 或者 js 等客户端脚本,放到 modules/自己模块名/assets 目录中
比如:modules/admin/assets

2 在自己的代码中用下面的代码 发布这些 客户端代码到公共 assets 目录
Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('application.modules.admin.assets'));
这个publish 方法 返回一个绝对路径,指向刚刚发布到外部 assets的目录。
另注意:publish 方法不会重复发布内容。参考 publish方法的$forceCopy=false 参数

3 然后再模块里就可以用 使用$this->module->assetsUrl就可以调用你的css等文件了。
注意:$this->module 是 ccontroller 的属性,代表当前控制器所属的 module。上面例子中就是 admin
这样模块代码中就实现了充分的独立性灵活性,使得代码可以灵活复用。

<?php
/**
* Admin module class
*/
class StatisticsModule extends CWebModule {
/**
* Default admin theme
*/
public $theme = 'default';
private $_assetsUrl;
public function init() {
// Yii::app()->theme = 'admin/' . $this->theme;
// Set theme url
// Yii::app()->themeManager->setBaseUrl( Yii::app()->theme->baseUrl );
// Yii::app()->themeManager->setBasePath( Yii::app()->theme->basePath );
// Set error handler
//Yii::app()->errorHandler->errorAction = 'admin/error/error';
/* Make sure we run the master module init function */
// Yii::app()->getAssetManager()->publish($baseJsPath, false, -1, YII_DEBUG);  //使用前强制更新asset
parent::init();
}

public function getAssetsUrl()
{
if($this->_assetsUrl===null)
$this->_assetsUrl=Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('application.modules.statistics.assets'));
return $this->_assetsUrl;
}
public function setAssetsUrl($value)
{
$this->_assetsUrl=$value;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: