【问题标题】:What's the proper way to work with assets in Yii?在 Yii 中使用资产的正确方法是什么?
【发布时间】:2009-11-05 08:39:50
【问题描述】:

我注意到 Yii 在 assets 目录中创建了一组奇怪的目录(名称如 8523d23 或 10s89b92),这甚至发生在运行时。例如,我的一张表有超过 10 条记录,分页启动,我在 assets 子目录中获得了一个名为 pager.css 的新文件。

当我将我的网站从测试转移到生产时,我应该复制所有这些,还是只创建一个空的“资产”目录,然后在运行时填充它?

如果我想添加一些新的 jQuery 插件,我应该如何进行?

例如,我想添加 jquery.charcounter.js,是复制到 assets 还是复制到 yii/framework/web/js/source?如果我做后者,如何让这个 .js 文件包含在 HTML 页面输出中?

【问题讨论】:

标签: php jquery-plugins yii assets


【解决方案1】:

assets 应该是一个可写目录。 Yii 负责资产管理。

通过调用Yii::app()->assetManager->publish(),可以将一些样式表、图像、脚本甚至整个目录放入网络可见的文件夹中。

pager.css 和其他不熟悉的文件由小部件(例如CLinkPager)和其他组件(例如CClientScript 在您需要时发布 jQuery)生成。

在部署期间,这个文件夹应该是空的,但这并不重要。

永远不要通过框架文件夹来添加插件。您可以将它们放置在 components 目录中并在必要时将其发布到运行时,或者放入任何其他方便的可见目录(例如 images 或 css)。

更新

嵌入jquery.charcounter.js,放入components目录,然后调用

Yii::app()->clientScript->registerScriptFile(
    Yii::app()->assetManager->publish(
        Yii::getPathOfAlias('application.components').'/jquery.charcounter.js'
    ),
    CClientScript::POS_END
);

关于奇怪的文件夹名称,我坚信它们是唯一的哈希(或一部分),因此如果应用程序使用多个扩展名,它们可以被区分。

【讨论】:

  • 那么,这方面没有明确的规定吗?如果您的项目需要包含 jquery.charcounter.js,您会究竟做什么?
  • 另外,请解释一下为什么像 734a23c4 这样有趣的目录名称?
  • 它创建一个路径的散列(可能是/very/deep/linking/path)并发布到那个新目录。这意味着不会显示目录结构(更重要的是,您可以发布通常无法通过 Web 访问的资产)。您还可以扩展assetManager 以自动为您压缩CSS/JS 文件(参见说明书)。
  • 你好,应该在哪里调用 Yii:app()?在控制器中?
  • @PaulPreibisch 你可以在任何你喜欢的地方调用它,但最好是在一个负责生成响应的服务中,这确实经常是控制器。
【解决方案2】:

这将解决查询,因为它提供了资产文件夹的详细说明:

http://www.yiiframework.com/wiki/148/understanding-assets/

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
相关资源
最近更新 更多