在本文中,我们通过Yii的演示博客
程序分析Yii
核心部分财富
管理。它可以自动加载CSS和javascript,只需要一个代码。具体分析如下:
打开博客主页并查看下面
介绍JS的HTML代码:
复制代码代码如下所示:
这些js
文件的
路径都在资产文件夹下面。Assets follows a path that is obviously hash through the folder path, which is the same way as the JS code belonging to JQ. 这个代码是从哪里来的
直接查看视图文件不能看到任何JS引入的代码,所以应该用小部件来介绍它:
复制代码代码如下:< PHP
美元->小
工具('zii。部件。CListView,阵列(
' ' = > $ dataProvider dataProvider,
itemview= > '_view,
模板{项目}
));
>
This widget is also an extension of Yii's own Zii. 所以我们可以
发现自CListView的代码,而这个CListView继承所以我们先看看,这个run
方法。
复制代码如下:公共
函数运行()
{
美元-> registerclientscript();
回声chtml::opentag(美元-> tagname,美元-> htmloptions)。n;
美元-> renderkeys();
美元-> rendercontent();
回声chtml::closetag(美元-> tagname);
}
注意第一个方法,registerclientscript,这是在CListView实施:
复制代码如下:公共
功能registerclientscript()
{
......
美元::CS = Yii应用程序-> getclientscript()();
$ CS -> registercorescript('jquery);
$ CS -> registercorescript('bbq);
......
}
看来,jQuery和BBP似乎很近,然后我们看看cclientscript::registercorescript方法:
复制代码如下:公共功能registercorescript($name)
{
美元-> _hasscripts =真;
美元-> _corescripts {姓名} =美元美元的
名字;
func_get_args $params =();
美元-> recordcachingaction('clientscript ','registercorescript,$params);
}
事实上,这主要是记录的最后一页将JS和实际生成的URL是通过getcorescripturl渲染方法:
复制代码如下:公共功能getcorescripturl()
{
如果(美元-> _baseurl!= NULL)
返回_baseurl美元->;
其他的
返回这个-> _baseurl = Yii应用::()-> getassetmanager()->发布(yii_path。' / / /
网页JS源);
}
那么让我们看看出版的具体过程:
复制代码如下:公共功能发布($路径,hashbyname美元= false,美元= 1美元的水平,forcecopy = false)
{
如果(is_file($ SRC))
{
$dir =美元->哈希($ hashbyname basename($ SRC):
目录($ SRC));
为文件名= basename($ SRC);
......
如果(is_dir($ SRC))
{
$dir =美元->哈希($ hashbyname basename($ SRC):$ SRC);
dstdir美元=美元-> getbasepath()。directory_separator美元目录;
......
}
我们在这里做哈希
处理的道路上,所以我们看到的路径是不规则的,因为JQ系列JS代码
都是相同的路径下(在框架/
网络/ JS /源),因此哈希值是相同的。
此外,正如上面提到的,cassetmanager使多个模块重复使用相同的编码
系统。使用cassetmanager的另一个优势是安全隔离,将真正的代码
保护路径和加载的需求。
希望本文有助于基于Yii框架的PHP程序设计人。