Хочу коснуться пресловутой проблемы устранения конфликта Motools, которую использует "в базе" ModX, и JQuery.
Юзаю
JCarousel, использующую JQuery.
Карусель нормально работает, если авторизоваться в админку ModX (когда появляется всплывающее админское окошко на motools), то карусель пропадает.
Это, конечно, не смертельно, так как простые посетители сайта в админку не заходят, а я могу зайти в другом браузере. Но все-таки неудобно.
Знаю, что можно устранить конфликт.
Есть некие решения:
http://docs.jquery.com/PrototypeAndJQuery
http://gblog.pp.ru/programming/jquery-i-mootools-vmeste (на русском - по сути, перевод первой статьи) +
http://www.htmlblog.ru/web-development/using-jquery-mootools-na-odnoj-stranice.html (там есть комментарии).
Написано:
Естественно в самих плагинах нужно заменить $( на jQuery(
Только вот я не пойму, где это все менять.
У меня есть шаблон с вызовом чанка с каруселью. Куда нужно вставить скрипт и где нужно поменять $ на JQuery?
Фрагмент шаблона:
<script src="manager/media/script/mootools/mootools.js" type="text/javascript"></script>
<script src="assets/templates/modxhost/drop_down_menu.js" type="text/javascript"></script>
{{carousel}}
</head>
Чанк carousel:
<!--
jCarousel core stylesheet
-->
<link rel="stylesheet" type="text/css" href="lib/jquery.jcarousel.css" />
<!--
jCarousel skin stylesheet
-->
<link rel="stylesheet" type="text/css" href="skins/bio/skin.css" />
<!--
jQuery library
-->
<script type="text/javascript" src="lib/jquery-1.2.3.pack.js"></script>
<!--
jCarousel library
-->
<script type="text/javascript" src="lib/jquery.jcarousel.pack.js"></script>
<script type="text/javascript">
var mycarousel_itemList = [
{url: 'team/1.jpg', title: '1', page:'[~75~]'},
{url: 'team/2.jpg', title: '2', page:'[~60~]'},
{url: 'team/3.jpg', title: '3', page:'[~61~]'},
{url: 'team/4.jpg', title: '4', page:'[~74~]'},
{url: 'team/5.jpg', title: '5', page:'[~73~]'},
{url: 'team/6.jpg', title: '6', page:'[~86~]'},
{url: 'team/7.jpg', title: '7', page:'[~62~]'},
];
function mycarousel_itemVisibleInCallback(carousel, item, i, state, evt)
{
// The index() method calculates the index from a
// given index who is out of the actual item range.
var idx = carousel.index(i, mycarousel_itemList.length);
carousel.add(i, mycarousel_getItemHTML(mycarousel_itemList[idx - 1]));
};
function mycarousel_itemVisibleOutCallback(carousel, item, i, state, evt)
{
carousel.remove(i);
};
function mycarousel_initCallback(carousel)
{
// Disable autoscrolling if the user clicks the prev or next button.
// carousel.buttonNext.bind('click', function() {
// carousel.startAuto(0);
// });
//carousel.buttonPrev.bind('click', function() {
// carousel.startAuto(0);
//});
// Pause autoscrolling if the user moves with the cursor over the clip.
carousel.clip.hover(function() {
carousel.stopAuto();
}, function() {
carousel.startAuto();
});
};
// Credits: Robert Penners easing equations (http://www.robertpenner.com/easing/).
jQuery.easing['BounceEaseOut'] = function(p, t, b, c, d) {
if ((t/=d) < (1/2.75)) {
return c*(7.5625*t*t) + b;
} else if (t < (2/2.75)) {
return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
} else if (t < (2.5/2.75)) {
return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
} else {
return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
}
};
/**
* Item html creation helper.
*/
function mycarousel_getItemHTML(item)
{
return '<a href="'+ item.page + '"><img src="' + item.url + '" width="190" height="148" border="0" class="mem" alt="' + item.title + '" /></a>';
};
jQuery(document).ready(function() {
jQuery('#mycarousel').jcarousel({
auto: 10,
scroll: 5,
wrap: 'circular',
itemVisibleInCallback: {onBeforeAnimation: mycarousel_itemVisibleInCallback},
itemVisibleOutCallback: {onAfterAnimation: mycarousel_itemVisibleOutCallback},
easing: 'BounceEaseOut',
animation: 1000,
initCallback: mycarousel_initCallback
});
});
</script>
Да, наверное, можно использовать iCarousel (на motools), но JCarousel в примере идет с наворотами, чего я для iCarousel сделать пока не могу, так что просьба помочь.