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

}
时间: 2024-10-26 09:12:57

YII 使用modules下的css,js,img的相关文章

IIS7的集成模式下如何让自定义的HttpModule不处理静态文件(.html .css .js .jpeg等)请求

今天将开发好的ASP.NET站点部署到客户的服务器上后,发现了一个非常头疼的问题,那么就是IIS7的应用程序池是集成模式的话,ASP.NET项目中自定义的HttpModule会处理静态文件(.html .css .js .jpeg等)请求,而这不是我预期的效果,因为我只想让托管文件(aspx, ascx 及 MVC等)的请求被自定义HttpModule处理,但是我发现在IIS7的集成模式下所有请求都会进入HttpModule被处理. 后来我尝试将IIS7站点下的应用程序池改为了经典模式,这样的话

CSS+JS下拉菜单和纯CSS下拉菜单

一.CSS+JS下拉菜单 原理:一级菜单的li中包含二级菜单ul.在鼠标没有移上去时,二级菜单的ul是display:none的状态,鼠标一移上去变成display:block.改变这个display属性值是通过JS来实现.鼠标hover时,把整个二级菜单的ul给display出来,用到的事件onmouseonver.鼠标移出又把整个二级菜单的ul 给隐藏掉. nav-js.html文件 <!DOCTYPE html > <html> <head> <meta c

ci调用application/views下的css,js,图片资源出现You don&#39;t have permission to access CodeIgniter on this server解决

原因是view文件下面有个.htaccess文件,里面写的是 Deny from all     //拒绝所有请求 自己本地测试的话,就直接去掉,放到服务器就指定application/views文件夹下面的东西可以访问权限 放在服务器上,在这句话下面增加正则制定可以访问application/views文件夹下面的东西就可以 ci调用application/views下的css,js,图片资源出现You don't have permission to access CodeIgniter o

纯css+js下拉菜单实例代码

纯css+js下拉菜单实例代码 分享一个css+js下拉菜单代码,js+css实现的简单下拉菜单,兼容性不错. 例子:<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <

DIV+CSS+JS仿Select下拉表单网页特效源代码下载

DIV+CSS+JS仿Select下拉表单 原文:DIV+CSS+JS仿Select下拉表单网页特效源代码下载 源代码下载地址:http://www.zuidaima.com/share/1550463331830784.htm <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <

CSS+JS感应鼠标展开的的二级下拉菜单

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>CSS+JS感应鼠标展开的的二级下拉菜单丨

CSS+JS仿QQ面板风格的多级折叠下拉菜单

<html> <head> <title>CSS+JS仿QQ面板风格的多级折叠下拉菜单丨石家庄玻璃隔断|石家庄自动门</title> <style type="text/css"> *{ margin:0px; padding:0px; border:0px; } body{ font-size:12px; color:#333;text-align:center;} .mbox{background:#73C2FF; wid

Linux下sublime Text3使用HTML/CSS/JS prettify问题

Linux下使用Sublime Text3,当用HTML/CSS/JS Prettify格式代码时报Node path err错误时可以再终端输入 which node 查看node 环境路径,在将正确路径配置在HTML/CSS/JS Prettify配置文档里

使用Tengine concat模块合并多个CSS,JS 请求

用淘宝改良的Nginx(Tengine)提供web服务 今天在本博客上顺利把Nginx换成了Tengine:并启用了动态加载模块 mod_concat,对本博客使用的知更鸟主题各个页面head模板中大量调用的多个CSS,JSS请求进行了合并,即客户端浏览器只需通过一次http请求,即可从服务器返回所需要的多个CSS,JS文件:下面是配置步骤: 编译安装Tengine 1,停止web服务,备份原来的Nginx目录(我是lnmp一键安装的,所以直接备份/usr/local/nginx目录即可) se