JQuery / прототип конфликтов в Magento - PullRequest
3 голосов
/ 23 сентября 2011

Это магазин Magento, основанный на теме Acumen от Themeforest.

На первый взгляд, jquery не работает.У Acumen есть загрузка jquery через magento статический блок, и ничего из этого не было затронуто.

Вчера я работал над добавлением плагина jquery.clearfield.js, чтобы добавить эту функциональность в наши формы.Я не изменял основные файлы.Я загрузил плагин clearfield через другой статический блок и добавил этот статический блок на нашу контактную страницу CMS.

Я вошел в систему в то время и получал зарегистрированные значения для имени / адреса электронной почты, заполняемые автоматически, и в какой-то момент я вышел из системы в качестве клиента, чтобы проверить значения полей, когда не вошел.

Мне не удалось войти из-за конфликтов jquery.Я прошел код, я не могу найти ничего, что изменило бы это, и я не модифицировал файлы ядра или темы.

Если вы просматриваете элемент source / inspect на любой из страниц, вы увидите сообщения об ошибках прототипа и jquery.

Любые мысли / идеи будут полезны.

Спасибо.

Ответы [ 3 ]

10 голосов
/ 25 октября 2011

Если вы хотите включить jquery, а не код конфликта в ваш local.xml, используйте:

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

Cheers !!

Редакция 2: Возможно, вы захотите отредактировать файл page.xml и вставить туда jquery.js и noConflict, поскольку файл page.xml загружается до local.xml.Или вы можете использовать local.xml, чтобы удалить все предыдущие вызовы js Prototype, а затем повторно добавить их.Я обнаружил, что редактирование page.xml было проще.

Также у меня возникли проблемы с тем, чтобы действие setText работало для "var jQuery = jQuery.noConflict ();", поэтому я создал отдельный файл js с этой строкойсамо собой.Не очень, но он загружается сразу после загрузки основного js-файла jQuery (и перед Prototype)

4 голосов
/ 23 сентября 2011

Обновление: не используйте это больше, обратитесь к ответу @MagePsycho выше.


Дело не в конфликте jQuery и Prototype, а скорееjQuery на самом деле еще не загрузился, когда вы вызываете jQuery.noConflict ().

В вашем источнике, вызов "jQuery.noConflict ()" прямо в голове, но сам jQuery загружается в самом концестраницы (ниже нижнего колонтитула) через API Google.

Я бы предложил отказаться от API Google, загрузить jQuery локально через XML с помощью

<action method="addItem"><type>skin_js</type><name>js/jquery-1.x.x.min.js</name></action>

и встроить jQuery.noConflict.() вызывать прямо перед концом самого jquery-1.xxmin.js.

1 голос
/ 23 сентября 2011

При совместном запуске jQuery и Prototype вам нужно запустить режим «без конфликтов».Это переназначает хук jQuery из «$» в «jQuery», позволяя Prototype продолжать использовать «$».

Если плагин использует «$», он будет использовать функцию искорее всего потерпит крах.Возможно, вам придется вручную отредактировать плагин и заменить «$» на «jQuery».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...