【问题标题】:How do I override the core jquery file with the externally hosted jquery from google如何使用来自谷歌的外部托管 jquery 覆盖核心 jquery 文件
【发布时间】:2012-05-17 22:22:21
【问题描述】:

在 Yii 中,目前 jquery 的所有依赖项都在加载 jquery 的本地版本,我相信它是 1.6.*,未缩小。

类似的东西:

<script src="/assets/2343/js/jquery.js"></script>

我想更新核心 jquery 依赖以使用来自 google 的 jquery 1.7.*

基本上我想包括

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"> 

每当 jquery 是依赖项时,位于我所有页面的底部。

【问题讨论】:

  • 假设您由于某种原因无法进入代码而只是更改脚本标签?
  • 标签由任何需要'jquery'的组件自动生成到视图中。无法更改脚本标签。
  • @BenRowe:为时已晚,为时已晚。修复您的代码,或在将其发送到浏览器之前更改输出。
  • 好吧,没那么快@hakre。我对 yii 一无所知,但是 wordpress 做同样的事情(只要它是一个依赖项就包括 jquery),并且有一个插件可以让你做 OP 要求的事情。所以可能也有办法用 yii 做到这一点。
  • 用 Yii 提供的解决这个问题 = 修复你的代码。在将输出发送到浏览器之前更改输出=与应用程序无关的解决问题的方式。仅供参考@JMCCreative

标签: php jquery yii google-api


【解决方案1】:

我知道,这个帖子很老了。但由于我刚刚有一个 encoutner,我认为提及这一点很重要。

在 Yii 的最新版本中,我从 1.1.11 快速转发到当前版本,包机制不仅得到了实现,而且得到了改进。它以前存在,但现在它实际上到达了一个点,将 jquery 部分设置为false 的最初声明和勾选的方法将不再有效。不过,我找到了解决方法!

$cs->packages["jquery"] = [
    "basePath"=>Yii::app()->cdn->basePath,
    "baseUrl"=>Yii::app()->cdn->baseUrl,
    "js"=>["js/jquery-1.11.1.js"]
];

这直接取自我的代码,但说明了我是如何做到的。基本上,我在包列表中添加了一个 jQuery 条目。当 Core 脚本被解析时,这个列表会在实际的 CoreScripts 之前搜索。因此,这将首先被选中,您可以通过这种方式添加您的个人版本的 jQuery。

希望对你有帮助!

【讨论】:

    【解决方案2】:

    Google 的第一次点击:http://www.yiiframework.com/wiki/259/serve-jquery-and-jquery-ui-from-google-s-cdn/

    除了覆盖 clientScript 配置,您可能还想覆盖 widgetFactory 配置:

      <?php
      return array(
      // other config
      'components'=>array(
        'clientScript'=>array(
          'packages'=>array(
            'jquery'=>array(
              'baseUrl'=>'//ajax.googleapis.com/ajax/libs/jquery/1/',
              'js'=>array('jquery.min.js'),
            )
          ),
          // other clientScript config
        ),
        'widgetFactory'=>array(
          'widgets'=>array(
            'CJui<WidgetName>'=>array( // where <WidgetName> is the name of the JUI Widget (Tabs, DatePicker, etc.). Each CJuiWidget used must be declared
              'scriptUrl'=>'//ajax.googleapis.com/ajax/libs/jqueryui/1/',
              'theme'=>JUI-THEME,
              'themeUrl'=>'//ajax.googleapis.com/ajax/libs/jqueryui/1/themes/',
            ),
            // Repeat for other CJuiWidgets
          ),
        ),
        // other component config
      ),
      // other config
    );
    

    【讨论】:

      【解决方案3】:

      还有另一种方法seen in yii's docs

      例如,我们可以包含来自 Google 服务器而不是我们自己的服务器的 jquery.js。为此,我们首先配置scriptMap如下,

      $cs=Yii::app()->clientScript;
      $cs->scriptMap=array(
       'jquery.js'=>false,
       'jquery.ajaxqueue.js'=>false,
       'jquery.metadata.js'=>false,
       ......
      );
      

      通过将这些脚本文件映射为 false,我们可以防止 Yii 生成包含这些文件的代码。相反,我们在页面中编写以下代码以明确包含来自 Google 的脚本文件,

      <head>
      <?php echo CGoogleApi::init(); ?>
      
      <?php echo CHtml::script(
       CGoogleApi::load('jquery','1.3.2') . "\n" .
       CGoogleApi::load('jquery.ajaxqueue.js') . "\n" .
       CGoogleApi::load('jquery.metadata.js')
       );
      ?>
      ......
      </head>
      

      【讨论】:

      • 该方法似乎在 1.1.16 停止工作......太糟糕了,我以前用它来做我自己的东西,现在我需要查找一个新方法。悲伤的脸。
      • @IngwiePhoenixthanx 让我注意到这一点,我将相应地调查并更新答案。竖起大拇指!
      【解决方案4】:

      在谷歌搜索和环顾四周后,我找到了答案:

      在配置中的“组件”下

      'clientScript'=>array(
        'packages'=>array(
          'jquery'=>array(
            'baseUrl'=>'http://ajax.googleapis.com/ajax/libs/jquery/',
              'js'=>array('1.7.2/jquery.min.js'),
            )
          ),
        ),
      ),
      

      【讨论】:

      • +1,看起来不错,yii的文档中还列出了另一种方法,检查我的答案,但是您的方法似乎更干净
      • @BenRowe:包含一个链接,指向对您有帮助的内容,这对将来遇到此答案的人非常有用。
      • 我喜欢这个答案,清洁和重复使用的解决方案!
      • 如果您希望 jquery 包含在您的所有视图中,这很好。如果您只想针对特定视图进行此操作,可以这样做:Yii::app()-&gt;clientScript-&gt;packages['jquery'] = array('baseUrl'=&gt;'/js/jquery/', 'js'=&gt;array('jquery-1.8.3.min.js')); :)
      猜你喜欢
      • 2015-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多