Google CDN jQuery,带有Magento布局XML中的本地后备


18

我已完成以下操作,以在Magento中包含来自Google CDN的jQuery:

<default>
    <reference name="head">
        <block type="core/text" name="google.cdn.jquery">
            <action method="setText">
                <text><![CDATA[<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script><script type="text/javascript">jQuery.noConflict();</script>]]>
                </text>
            </action>
        </block>
    </reference>
</default>

但是,当我想通过本地后备实现(效果很好)来实现时,我最终将其添加到.phtml中,如下所示:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>
if (!window.jQuery) {
    document.write('<script src="/path/to/your/jquery"><\/script>');
}
</script>
  • 是否有一个更优雅的这样的方式在local.xml中,而不是推回退入<text>节点,因为我有做的jQuery.noConflict

编辑:

提请注意问题的另一部分-是否有包含jQuery的社区模块适合您?如果他们有本地jQuery,那就很好-如果他们使用Google CDN-甚至更好。如果不存在,我很乐意创建一个。

  • 是否有任何扩展插件可以处理此问题,而无需我自己引导它?

1
一个非常简单的社区模块,其中包括JQuery(半自我链接):github.com/netz98/N98_BaseJQuery-它仅包含本地JQuery。通过CDN的想法很好,可以通过Pull Requests :-)随时加以改进
Alex

出于好奇:CDN是否不可靠?为什么需要回退?您在那里有什么样的实践经验?
亚历克斯

2
一些国家(伊朗,叙利亚等)可能有时会阻止Google和Google CDN。这是我的亲身经历。我还看到了缓解响应超时等问题。
philwinkle

了解。因此,如果您可以为该模块提供解决方案,那就太酷了。
亚历克斯

很棒的发现-寻找合适的东西时我没有看到N98模块。我想我会在那里做。谢谢!但是,可能必须采用上述<text>方法...不确定是否可以接受。我认为n98模块使用一个单独的js包含文件来调用noConflict ...
philwinkle

Answers:


18

最终,最好通过Layout XML进行此操作。我发现最好在单行语句中使用Google Closure Compiler最小化本地回退选项。

<default>
    <reference name="head">
        <block type="core/text" name="google.cdn.jquery">
            <action method="setText">
                <text><![CDATA[<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script><script>window.jQuery||document.write('<script src="/path/to/your/jquery.js">\x3c/script>');</script><script>jQuery.noConflict();</script>]]></text>
            </action>
        </block>
    </reference>
</default>

这不起作用
fmsthird

2

我花了很长时间查看head.phtml文件以及周围的文件和块的代码,但是没有办法更改模板以将代码注入<head>。

我是个白痴,你已经写了所有东西,而我<?php echo $this->getChildHtml() ?>head.phtml:-/中监督了几次

因此,我将为此使用一个core/template块和一个模板。它易于阅读,易于理解和易于管理。


我要克服的问题是可以随意从某些页面类型和布局添加/删除此块的功能,而不必每次都强制包含phtml。现在,一个静态块就足够了,但这仅是因为它在任何地方都可以使用……
philwinkle

我在这里看不到问题。您可以将其添加到<default>并将其删除,就像所有其他块一样,在所有您不想拥有的地方。您可以考虑添加一个,core/text_list然后在其中添加所需的所有内容(如果它是多个文件),以便更轻松地在其他页面上将其删除。
Fabian Blechschmidt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.