Google CDN jQuery з локальним запасом у Magento Layout XML


18

Я зробив наступне, щоб включити jQuery з Google CDN в Magento:

<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 include для виклику noConflict, хоча, я думаю ...
philwinkle

Відповіді:


18

Зрештою, робити це через макет XML бажано. Я виявив, що локальний варіант резервного копіювання найкраще реалізувати в однорядковому операторі, укомплектованому компілятором закриття Google.

<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та додавати туди всі потрібні речі (якщо їх більше ніж один файл), щоб легше було видалити їх на інших сторінках.
Фабіан Блешшмідт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.