YII中assets的使用示例

一、YII assets的作用:

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

$assets = Yii::getPathOfAlias('ext').'/css';
//$baseUrl = Yii::app()->getAssetManager()->publish($assets);
$baseUrl = Yii::app()->assetManager->publish($assets); //extensions/css发布到assets的创建一个随机不冲突的文件夹下
Yii::app()->clientScript->registerCssFile($baseUrl.'/main.css');//引用assets下面的main.css

2.如果一个模块需要添加使用资源,直接从webroot中引用添加即可。
但是试图创建一个模块能够在任何地方引用,且资源独立并能够避免命名冲突 。
你如何保证你的文件名不会与一些零散的应用程序的尝试使用相同名称的文件冲突,对于js,images,css也一样。
通过CAssetManager,Yii::app()->assetManager能够自动的将私有资源publish到公共目录下webroot/assets

二、使用示例:

下面以admin module为例说明assets的用法:

1、把需要用到的资源放在modules/admin/assets下。

2、通过 CAssetManager,Yii::app()->assetManager能够自动的将私有资源publish到公共目录下 网站目录/assets

3、Yii会自动在网站目录的/assets下创建一个随机不冲突的文件夹,如2b31b42b,并把你的modules/admin/assets目录下的文件拷贝过去。
通过如下代码获得,修改protected\modules\admin\AdminModule.php文件,

_assetsUrl===null)
$this->_assetsUrl=Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('application.modules.admin.assets'));
return $this->_assetsUrl;
}

public function setAssetsUrl($value)
{
$this->_assetsUrl=$value;
}
}

然后,在/protected/modules/admin/views/layouts/main.php中使用$this->module->assetsUrl就可以调用你的css等文件了,代码如下所示:

使用前还需要强制更新asset,代码如下:

$baseJsUrl = Yii::app()->getAssetManager()->publish($baseJsPath, false, -1, YII_DEBUG);

例如我的模块是Admin,文件路径通过如下代码获得,

class AdminModule extends CWebModule
{

private $_assetsUrl;

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

public function setAssetsUrl($value)
{
$this->_assetsUrl=$value;
}

 

}

然后,在layout中的main.php中
使用$this->module->assetsUrl就可以调用你的css等文件了。
代码如下,
<link rel="stylesheet" type="text/css" href="www.111cn.net" target="_blank" title="com">com</a>/a/2172928/<?php" target="_blank" rel="nofollow">

  4,通过如上操作,该模块只要把admin目录拷贝,就可以多次复用了。

在实际开发中的代码:

 

           $resources = dirname(Yii::app()->controllerPath).DIRECTORY_SEPARATOR.'media';
         // publish the files
         $baseUrl = Yii::app()->assetManager->publish($resources,'','',true);

                // register the files
                Yii::app()->clientScript->registerScriptFile($baseUrl.'/js/admin.js');
         Yii::app()->clientScript->registerScriptFile($baseUrl.'/js/jquery.idTabs.min.js');
             Yii::app()->clientScript->registerCssFile($baseUrl.'/admin.css');

我遇到的问题是,每当我更改样式的时候,asset下的文件是不会随着原文件更新的。网上的回答是清空asset目录,我就不相信这么低能,所以查了一下CAssetManager的publish函数,发现它是有4个参数,

时间: 2024-10-11 19:02:02

YII中assets的使用示例的相关文章

YII中assets的使用示例_php实例

一.YII assets的作用: 1.yii中assets的作用是方便模块化,插件化的,一般来说出于安全原因不允许通过url访问protected下面的文件 ,但是我们又希望将module单独出来,所以需要使用发布,即将一个目录下的文件复制一份到assets下面方便通过url访问 $assets = Yii::getPathOfAlias('ext').'/css'; //$baseUrl = Yii::app()->getAssetManager()->publish($assets); $

SQL Server 2005 中的树形数据处理示例-1

server|示例|数据 SQL Server 2005 中的树形数据处理示例 -- 创建测试数据 if exists (select * from dbo.sysobjects where id = object_id(N'[tb]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)    drop table [tb]GO -- 示例数据create table [tb]([id] int PRIMARY KEY,[pid] int,name nvar

asp.net页面中时间格式化的示例

 这篇文章主要介绍了asp.net页面中时间格式化的示例,需要的朋友可以参考下 asp.net页面将Eval中的时间显示为"yyyy-MM-dd"格式    代码如下: <table>   <tr>     <td style="width:273px;color:#105db5;" valign="top">[**平台]  <a href="javascript:void(0)" s

Android 通过onDraw实现在View中绘图操作的示例

以下是对Android通过onDraw实现在View中绘图操作的示例代码进行了详细的分析介绍,需要的朋友可以过来参考下   Android绘图操作,通过继承View实现,在onDraw函数中实现绘图.下面是一个简单的例子: 复制代码 代码如下: public class AndroidTest extends Activity {     /** Called when the activity is first created. */     @Override     public void

php中sql注入漏洞示例

 这篇文章主要介绍了php中sql注入漏洞示例,大家在开发中一定要注意 在开发网站的时候,出于安全考虑,需要过滤从页面传递过来的字符.通常,用户可以通过以下接口调用数据库的内容:URL地址栏.登陆界面.留言板.搜索框等.这往往给骇客留下了可乘之机.轻则数据遭到泄露,重则服务器被拿下.    一.SQL注入的步骤   a)  寻找注入点(如:登录界面.留言板等)   b)  用户自己构造SQL语句(如:' or 1=1#,后面会讲解)   c)  将sql语句发送给数据库管理系统(DBMS)  

js获取url中指定参数值的示例代码

 这篇文章主要是对js获取url中指定参数值的示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 如下所示: 代码如下:  ///获取url中指定参数         // <param name="paras">参数名称</param>         ///         function request(paras) {             var url = location.href;             var paraStr

javascript设计模式中的工厂模式示例

 这篇文章主要介绍了javascript设计模式中的工厂模式示例讲解,需要的朋友可以参考下 javaScript工厂方式原始的方式   因为对象的属性可以在对象创建后动态定义,这在 JavaScript 最初引入时都会编写类似下面的代码   代码如下: var oCar = new Object; oCar.color = "blue"; oCar.doors = 4; oCar.mpg = 25; oCar.showColor = function() {   alert(this.

Yii中CArrayDataProvider和CActiveDataProvider区别实例分析_php实例

本文实例讲述了Yii中CArrayDataProvider和CActiveDataProvider区别.分享给大家供大家参考,具体如下: 1.CArrayDataProvider   获取其他数据库或者数据表的数据列表 $sql = "Select * from tbl_count2 order by id desc"; $data = Yii::app()->marketdb->createCommand($sql)->queryAll(); $dataProvid

YII中session和cookie

一,在Yii中使用session  与原生态php5的session使用差别是,php5使用session_start();$_session['key'] = $value;  在yii中,session已经被封装.不需要start,但需要new一个session对象. Java代码   /***** 方式一.实例添加 *****/   $session=new CHttpSession;   $session->open();   $value1=$session['name1'];