jQuery.noConflict или как я воевал с prototype.

#
jQuery.noConflict или как я воевал с prototype.
Не претендую на звание первооткрывателя, но может кому пригодится.
Сложилась такая ситуация, что клиент попросил интернет-магазин. Все бы ничего, но шаблон который он предоставил, был заскриптован "по самое не могу" и при сборке шаблона на cms начали возникать проблемы с hostcms.js и main.js с библиотекой prototype (Error: addIntoCart is not defined). Шаблон использует в <button> метод onclick="setLocation('{url}')" метод берется из стороннего скрипта, который обращается к prototype (который использует $), а кнопка добавления товара в корзину и выбора локации доставки(страна, город и т.д.) метод onclick="return $.addIntoCart('{/shop/url}cart/', {@id}, 1)" который тоже использует $. От отчаяния я уже задумал переписать hostcms.js и main.js, но решил чуть глубже поковыряться в jQuery.noConflict();
<Лирическое отступление>Как нам говорят на сайте http://api.jquery.com/jQuery.noConflict/ переменная $ используется как алиас для jQuery.</Лирическое отступление>
После пары кружек кофе решение было найдено, оно конечно не претендует на элегантность, но....
Мы берем hostcms.js и main.js копируем к себе в папку template№/js/ или куда заблагорассудится (что-бы после первого-же обновления системы нам не пришлось переделывать скрипты заново) и с начале кода пишем в hostcms.js:
jQuery.noConflict();
jQuery( document ).ready
а в main.js
var $ = jQuery.noConflict();
а в xsl шаблонах меняем
onclick="return $.addIntoCart('{/shop/url}cart/', {@id}, 1)" на onclick="return jQuery.addIntoCart('{/shop/url}cart/', {@id}, 1)"
и voila! все работает. Ну соответственно меняем в xsl шаблонах все что содержит $.<function> на jQuery.<function>. Единственный минус который я обнаружил при использовании этого метода, он не работает при вкюченной админке константе: ALLOW_PANEL TRUE, выскакивает ошибка:
Uncaught TypeError: Cannot read property 'css' of null hostcms6.js?1191882899:410methods.show hostcms6.js?1191882899:410jQuery.extend.loadingScreen hostcms6.js?1191882899:438jQuery.extend.clientRequest main.js:179jQuery.extend.addIntoCart hostcms.js:6onclick
, но это особо не критично.
В говно может вступить любой желающий. (с)
Авторизация