MagentoレイアウトXMLのローカルフォールバックを使用したGoogle CDN jQuery


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を介したアイデアは素晴らしく、プルリクエストを介して自由に改善してください:
アレックス

好奇心から:CDNは信頼できないか、またはフォールバックが必要な理由は何ですか?どんな実務経験がありますか?
アレックス

2
一部の国(イラン、シリアなど)は、GoogleおよびGoogle CDNをブロックすることがあります。これは私の個人的な経験です。また、これにより軽減される応答タイムアウトのようなものを見てきました。
philwinkle

理解する。そのため、モジュールにソリューションを提供できるといいですね。
アレックス

素晴らしい発見-適切なものを探しているときにN98モジュールが見つかりませんでした。私はそこに貢献すると思います。ありがとう!ただし、<text>上記の方法を使用する必要がある場合があります...それが許容できる解決策かどうかはわかりません。n98モジュールは、noConflictを呼び出すために個別のjsインクルードファイルを使用しますが、私は
...-philwinkle

回答:


18

結局のところ、レイアウトXMLを介してこれを行うことが望ましいです。ローカルフォールバックオプションは、Google Closure Compilerで縮小された1行のステートメントで最適に実装されることがわかりました。

<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必要なものをすべて追加して(複数のファイルである場合)、他のページで簡単に削除することを検討できます。
ファビアンブレシュミット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.