首页 > 代码库 > YII 使用modules下的css,js,img

YII 使用modules下的css,js,img

 用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;    } }

 

YII 使用modules下的css,js,img