Используйте несколько версий jQuery на сайте Joomla без переименования jQuery - PullRequest
1 голос
/ 07 июля 2011

Я знаю, что мой вопрос похож на многие другие, но я надеюсь, что особенности достаточно разные, чтобы оправдать новый вопрос.Сайт Joomla, над которым я работаю, использует mod_superfishmenu.Это загружает JQuery 1.2.6.и расширяет его.Я создаю компонент, который использует плагин jQuery colorbox, который требует jQuery 1.3 или выше и снова расширяет JQuery.Один из способов получить оба - переназначить jQuery на другое имя с помощью jQuery.noConflict ().Например,

<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js'>
</script>
<script type='text/javascript'>
var jQuery1 = jQuery.noConflict(true);
</script>

, а затем измените все экземпляры jQuery в коде JavaScript для colorbox на jQuery1 и убедитесь, что все это загружается до того, как модуль superfish загрузит свой jQuery.Но мне не нравится редактировать код colorbox или вспоминать его, если я обновляюсь до более новой версии.Итак, я подумал, что сначала можно загрузить более старый jQuery, затем использовать jQuery.noConflict (true), чтобы переименовать его, затем загрузить текущий jQuery и перенести плагины, присоединенные к первому jQuery, во второй.Часть, которая копирует плагины, выглядит следующим образом:

<script type='text/javascript'>
var oldJquery = null;
if (jQuery != undefined) {
  oldJquery = jQuery.noConflict(true);
}
</script>

<script type='text/javascript'  src='http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js'>
</script>

<script type='text/javascript'>
jQuery.noConflict();
if (oldJquery) {
  for (plugin in oldJquery.fn) {
    if (!(plugin in jQuery.fn))
      jQuery.fn[plugin] = oldJquery.fn[plugin];
  }
}
</script>

Кажется, это работает, но я обеспокоен тем, что пропустил некоторые детали, которые могут укусить меня позже.Так что, если кто-то видит недостаток в этом подходе, пожалуйста, укажите на это.Я также приветствую любую критику, которая показывает, почему это плохая идея.Спасибо.

1 Ответ

0 голосов
/ 07 июля 2011

Почему бы не сделать простое изменение в mod_superfishmenu и удалить строку, включающую jQuery 1.2.6? Таким образом, ваш плагин jQuery colorbox сам загрузит jQuery 1.3, который также будет использовать mod_superfishmenu. Простое изменение в одну строку, которое не сложно сделать.

В качестве примечания, я думаю, что все разработчики для Joomla, которые включают в себя любую библиотеку javascript, должны иметь настройки бэкэнда, чтобы пользователи могли включать или отключать любую библиотеку в случае конфликтов.

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