Как я могу добавить библиотеку jQuery в администрацию Joomla?

Я использую Joomla 1.5, и я хотел бы добавить библиотеку jQuery в бэкэнд joomla, чтобы помочь мне добавить взаимодействие в дизайн моих представлений компонентов.

Хотелось бы, чтобы jQuery добавлялся в раздел HEAD определенных страниц администрирования и конечно же не конфликтовал с библиотекой MooTools, которая уже включена в Joomla.

Кто-нибудь знает, как это сделать?


person Ben    schedule 04.11.2010    source источник


Ответы (2)


Хочешь узнать действительно плохие новости? Компоненты, созданные для административной части Joomla, часто сильно зависят от MooTools (до недавнего времени это была очень древняя версия MooTools). Хотите знать хорошие новости? Если вы вставите сценарий jQuery перед сценарием MooTools, MooTools переопределит переменную $, но у вас останется доступ к переменной jQuery. Сделав это наоборот, jQuery будет владеть $, и некоторые плагины и шаблоны, вероятно, будут кричать на вас.

Итак, как вы говорите? Самый простой способ - следовать по этому пути:

/libraries/joomla/document/html/renderer/head.php

Перейдите в этот файл прямо к строке 129, где написано «Создать ссылки на файлы сценариев». Прежде чем он запустит foreach над этим массивом $document->_scripts..., вставьте это:

if ($mainframe->isAdmin) {
    $strHtml .= $tab.'<script type="text/javascript" src="/media/system/js/jquery.js"></script>'.$lnEnd;
}

И просто замените этот src на путь к вашему скрипту jquery. Теперь в вашем инструменте администрирования вы сможете ссылаться на объект jQuery с помощью глобальной переменной jQuery следующим образом:

jQuery('#myElement').hide();

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

person treeface    schedule 04.11.2010
comment
Спасибо за этот отличный ответ. Мне просто нужно было немного изменить код, который вы мне дали, чтобы проверить, являемся ли мы частью администратора или нет. это выглядит так: global $mainframe; if ($mainframe instanceof JAdministrator) { $strHtml .= $tab.'‹script type=text/javascript src='.JURI::base().'../media/system/js/jquery-1.4.3. min.js›‹/script›'.$lnEnd; } - person Ben; 05.11.2010

ИМХО, лучший способ - сделать функцию готовности документа следующим образом:

var $jq = jQuery.noConflict();

jQuery(document).ready(function($){
  // your doc ready code...
});

Итак, первое, что он делает, это переводит jQuery в режим noConflict, который по существу переназначает "$" на "$jq". Поэтому вместо того, чтобы вызывать jQuery следующим образом: $(x).y(), вы должны сделать это: $jq(x).y(). Это все прекрасно и денди. На самом деле вам даже не нужно этого делать, вы также можете использовать "jQuery" (т.е. jQuery(x).y() ). "$" - это просто псевдоним.

Во-вторых, приведенная выше конструкция docready передает '$' в качестве аргумента, который снова является псевдонимом для jQuery и позволяет вам использовать '$' в обратном вызове docready.

Надеюсь это поможет. Я бы написал в качестве комментария, но у меня недостаточно баллов или чего-то еще, чтобы комментировать.

person lucifurious    schedule 05.11.2010