Подключение jQuery

Главные вкладки

Аватар пользователя foax foax 29 июля 2011 в 13:16

Может кому пригодится...

В поисках подходящего слайд шоу для одного из своих проектов наткнулся вот на такую вещицу http://www.serie3.info/s3slider/index.php. Этот s3Slider jQuery plugin требует подключения библиотеки jQuery. Однако описанным на сайте способом подключение, вызывает конфликты в работе с собственной библиотекой друпал.
Решение нашлось на сайте drupal.org http://drupal.org/node/304255.
Нужно в файл template.php вашей темы добавить:

<?php
drupal_add_js
(drupal_get_path('theme''mytheme') .'/my_js_file.js''theme');
?>

Комментарии

Аватар пользователя foax foax 29 июля 2011 в 14:04

Punk_UnDeaD wrote:
блин, а что, в друпал jQuery уже не встроена?

встроена, но s3slider почему то не хотел просто так с ней работать...

Аватар пользователя drupby drupby 29 июля 2011 в 13:34

"RxB" wrote:
Да, чем дальше, тем выше уровень.

А в .info файл добавить scripts[] = my_script.js?
Учиться ,учиться и еще раз учиться ?

Аватар пользователя foax foax 29 июля 2011 в 14:06

drupby wrote:
"RxB" wrote:
Да, чем дальше, тем выше уровень.

А в .info файл добавить scripts[] = my_script.js?
Учиться ,учиться и еще раз учиться ?

Согласен! Я не специалист. Была проблема, вот такое решение я нашел.
Если то что я разместил глупо, давайте я удалю пост?

Аватар пользователя foax foax 29 июля 2011 в 14:17

Punk_UnDeaD wrote:
"foax" wrote:
встроена, но s3slider почему то не хотел просто так с ней работать..

а так он захотел?

в html то что изменилось?

Так заработал.
По второму вопросу я не понял что имеется ввиду?
В page.php вставил:

  <!-- s3slider -->
  <link type="text/css" rel="stylesheet" media="all" href="/sites/default/files/s3slider/s3slider.css" />
  <script type="text/javascript" src="/sites/default/files/s3slider/s3slider.js"></script>
  <!-- /s3slider -->

Создал блок для слайд шоу и там прописал собственно HTML с картинками.
Перед ним, там же в блоке, вот это:

<script type="text/javascript"><!--
$(document).ready(function() {
   $('#slider').s3Slider({
       timeOut: 5000
   });
});
//--></script>
Аватар пользователя drupby drupby 29 июля 2011 в 14:15

"Punk_UnDeaD" wrote:
"foax" написал(а):

встроена, но s3slider почему то не хотел просто так с ней работать..

а так он захотел?

в html то что изменилось?


Значит s3slider требует более новую версию jquery -
надо только установить модуль jQuery Update

Аватар пользователя foax foax 29 июля 2011 в 14:22

Господа я не претендую на "самого светлого" здесь.
Почти сутки бился над этим слайд шоу. И конечно же пробовал с jquery_update. Но на шестерки пропадали открывающиеся меню на странице редактирования ноды и блока.
Методом научного тыка, удалось выяснить, что проблема в jquery, которую я пытался подключить, так как друпаловская не работала с s3Slider.

Аватар пользователя Punk_UnDeaD Punk_UnDeaD 29 июля 2011 в 14:28

"foax" wrote:
Методом научного тыка, удалось выяснить, что проблема в jquery, которую я пытался подключить, так как друпаловская не работала с s3Slider

я вам скажу умный вещь, только не обижайтесь
1 у jquery есть несколько версий
2 плагины требуют разных версий не просто так
3 обратная совместимость ломается, это тоже не просто так, на сайте jquery про это пишут

через это надо неплохо понимать, что именно происходит и почему

в данный момент мои проекты используют 1.5.2 версию безо всяких jquery_update
но для этого мне пришлось патчить ядро

Аватар пользователя foax foax 29 июля 2011 в 14:39

Punk_UnDeaD wrote:
"foax" wrote:
Методом научного тыка, удалось выяснить, что проблема в jquery, которую я пытался подключить, так как друпаловская не работала с s3Slider

я вам скажу умный вещь, только не обижайтесь
1 у jquery есть несколько версий
2 плагины требуют разных версий не просто так
3 обратная совместимость ломается, это тоже не просто так, на сайте jquery про это пишут

через это надо неплохо понимать, что именно происходит и почему

в данный момент мои проекты используют 1.5.2 версию безо всяких jquery_update
но для этого мне пришлось патчить ядро

Я понимаю, что версии есть разные http://docs.jquery.com/Downloading_jQuery#Current_Release
И на drupal.org есть хорошая статья о совместимости и прочем http://drupal.org/node/121997

На этом сайте обитает большое количество чайников как и я. Порой более грамотные коллеги не могут доходчиво объяснить что и почему. Вот так пытаюсь шаг за шагом что то понять.
Я уже писал если вы мне скажите прямым текстом: "ты тут парень чушь пишешь", удалю я свою писанину, что бы не вводить в заблуждение общественность:)
Ну а если хоть толика смысла есть, то может кто то сочтет это пригодным?

Аватар пользователя Alexei91 Alexei91 29 июля 2011 в 19:32

К слову.
foax, нельзя ли делать проще, подключая через INFO-файл шаблона:

; Скрипты
; -----------------------------------------------------------------------------
scripts[] = scripts/jquery-1.4.1.min.js
scripts[] = scripts/...
Аватар пользователя Xermit Xermit 29 июля 2011 в 22:33

Посвечусь Smile

у меня тоже используется jquery из последних версий и jquery-ui на момент прикручивания последний, и как это сделать я написал здесь
Подружить последний jquery ui и drupal , без конфликтов с уже имеющимся в друпале jquery, работает и в админке и для анонимусов без патчей ядра если так можно выразится.

jquery_update при этом стоит, но для модулей которые не требует распоследних модулей jquery или jquery-ui

Аватар пользователя Punk_UnDeaD Punk_UnDeaD 29 июля 2011 в 23:17

"Xermit" wrote:
Подружить последний jquery ui и drupal , без конфликтов с уже имеющимся в друпале jquery, работает и в админке и для анонимусов без патчей ядра если так можно выразится.

а json запросы работают? у меня получилось, что нет
это не хилый кусок функционала

Аватар пользователя Cyber Cyber 29 июля 2011 в 23:25

Всё таки самое на мой взгляд оптимальное, но не совсем правильное, это патч ядра + хак jQuery update на предмет выноса jQuery в отдельно подключаемый скрипт, который лучше всего брать со внешнего CDN.

Если кому интересно - накропаю ман.

Аватар пользователя Punk_UnDeaD Punk_UnDeaD 29 июля 2011 в 23:43

"Cyber" wrote:
Всё таки самое на мой взгляд оптимальное, но не совсем правильное, это патч ядра

без него никак, на самом деле

"Cyber" wrote:
+ хак jQuery update на предмет выноса jQuery в отдельно подключаемый скрипт, который лучше всего брать со внешнего CDN.

раз уж ядро попатчили, то ещё пару файлов поменять тоже не проблема, они в одной поставке идут
внешний cdn - это конечно круто, но как единое универсальное решение он не годится, не надо оптимизировать заранее
ведь существует ненулевая, хоть мизерная вероятность того, что сайт будет болтаться в изолированной части сети
да и при разработке зависеть от могущего упасть инета не особо здорово

но это мелочи, а патч ядра для работы json ajax запросов - вот что на самом деле важно

Аватар пользователя Xermit Xermit 29 июля 2011 в 23:44

"Punk_UnDeaD" wrote:
а json запросы работают? у меня получилось, что нет
это не хилый кусок функционала

весь функционал админки по управлению вьюсами к примеру или например корзина уберкарт как работала в моем случае так и продолжала работать, но при этом я юзаю новый jquery и ui

Аватар пользователя Xermit Xermit 29 июля 2011 в 23:59

Парни вот почему вы ядро патчите, а я нет и у меня все работает без патча ядра!
Идея проста как репа
!!!!!!!!!!!!!!!!!!!!!!
на сайте остается как старый друпал со старым ui для тех кто в друпале его юзает и параллельно им на странице существует экземляр нового jquery, и jquery-ui, которые используются скриптами которым они нужны.
и работает.
у меня даже есть куски когда обработчик от нового jquery внутри дергает функции в контексте старой версии jquery.

ведь jquery это просто js Object присвоенный глобальной переменной jQuery на странице, в который натолкали функций, а для удобства создали глобальную переменную $ на странице в объекте window, который тупо ссылается на jQuery.

кто же вам мешает загрузить более новую версию jQuery в другую глобальную переменную, например
в jQuery14
и потом просто использовать ее
jQuery14.ready(function()
{
//пример вызова функции в контексте старой версии jquery, см. ниже
jQuery('body').css('background-color', 'red').append('версия'+jQuery('jquery').jquery);
//А это та же функция, но вызванная у новой версии jquery
jQuery14('body').css('background-color', 'red').append('версия'+jQuery14('jquery').jquery);

});

а весь старый код в друпале будет работать как и работал

прочитайте и не мучайтесь с патчами друпала!

все итак работает.

Аватар пользователя Cyber Cyber 29 июля 2011 в 23:55

"Punk_UnDeaD" wrote:
раз уж ядро попатчили, то ещё пару файлов поменять тоже не проблема, они в одной поставке идут
внешний cdn - это конечно круто, но как единое универсальное решение он не годится, не надо оптимизировать заранее
ведь существует ненулевая, хоть мизерная вероятность того, что сайт будет болтаться в изолированной части сети
да и при разработке зависеть от могущего упасть инета не особо здорово

Окей. смысл в том, что можно и не вытягивать на CDN, а вот выбрать нужную версию и подключить локально -- без проблем(для тестирования удобно очень). Сделал так потому, что компиляты быстрее собираются, и всё таки когда тянется с CDN выходит быстрее. Тут паралельная загрузка плюсом.

Это удобно на самом деле, если ещё и скрипты в подвал сдропнуть. Но некоторые модули генерируют инлайны с аргементами $ и конечно jQuery болтающийся в подвале работать не будет. Поэтому на CDN его и руками в шаблон или через тему. на данный момент этот способ мне кажется самым эффективным.

Аватар пользователя Xermit Xermit 29 июля 2011 в 23:56

Кстати cdn у меня на тестовой версии сайта дома включено и отлично все работает, хотя весь сайт по прежнему находится в одной папке, но js грузятся с одного домена а картинки с другого, при этом apache сервер основной как был один так и остался, даже виртуальных сайтов не делал, для этих доменов. И для этого тоже есть стандартные модули, мучать ничего уже не надо.

Аватар пользователя Cyber Cyber 29 июля 2011 в 23:58

"Xermit" wrote:

Парни вот почему вы ядро патчите, а я нет и у меня все работает без патча ядра!
все итак работает.

Да это говно вариант. Захрена 2 jQuery таскать? У вас ни один AJAX и batch не сработает.

"Xermit" wrote:
И для этого тоже есть стандартные модули, мучать ничего уже не надо.

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

Аватар пользователя Punk_UnDeaD Punk_UnDeaD 30 июля 2011 в 0:06

"Cyber" wrote:
Это удобно на самом деле, если ещё и скрипты в подвал сдропнуть.

всю достройку DOM, если она есть, надо туда выносить в обязательном порядке
и не цеплять её на документ риди
так шанс, что достройка закончится до того, как стартанёт рендеринг, возрастёт многократно

проверено лично

Аватар пользователя Xermit Xermit 30 июля 2011 в 0:11

"Cyber" wrote:

а не говно вариант убить год или два пока все ошибки вычистите от замены одной версии jquery на другую, а за это время в 8-м друпале они просто тупо включат jquery-1.4 а к тому времени выпустя уже какой нить jquery-2.0 и вы так и будете носится с патчами и так далее, и решать чужие задачи, когда вам надо решать другие свои.

ajax весь у меня работает, с чего ему не работать то? у меня корзина уберкарт в кэшировании работает, views работает, админка у него через ajax сделана.

А чего там разбираться с CDN, ускорить парралельную загрузку файлов из-за ограничения одновременно числа загружаемых файлов броузером с одного домена. Оно либо работает либо нет, на продакшене не проверял, но вот уже месяца два локально стоит просто побаловаться глюков не заметил, а вот скорость загрузки на странице действительно выросла, и если в файрбаге раньше загрузка тучи файлов было на графике в правой части, то сейчас ближе к середине, что уже лучше.
В абсолютных единицах время тоже уменьшилось, не намного но уменьшилось.

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

Аватар пользователя Punk_UnDeaD Punk_UnDeaD 30 июля 2011 в 0:43

"Xermit" wrote:
а не говно вариант убить год или два пока все ошибки вычистите от замены одной версии jquery на другую, а за это время в 8-м друпале они просто тупо включат jquery-1.4

а в семёрке щас какой?

"Xermit" wrote:
ajax весь у меня работает, с чего ему не работать то? у меня корзина уберкарт в кэшировании работает, views работает, админка у него через ajax сделана.

да, конечно, всё работает
плевать, что на сайте jquery написано об изменениях в json

Аватар пользователя Cyber Cyber 30 июля 2011 в 0:44

"Punk_UnDeaD" wrote:
всю достройку DOM, если она есть, надо туда выносить в обязательном порядке
и не цеплять её на документ риди
так шанс, что достройка закончится до того, как стартанёт рендеринг, возрастёт многократно
проверено лично

Хм .. на самом деле не думаю, что особо актуально. Вообще тогда стоит и про defer(не выполнять пока не закончится парсинг и обработка) вспомнить. Достройка DOM на Document Ready довольно удобна, если присмотреться. Я через неё вывожу кнопки +1 и яндексовские закладки. Они всё равно без скриптов не работают. даже скрипты закладок подключаю динамически по рэди.

Логика: грузим документ, рендерим, под рэди достраиваем + подгружаем всё левое. Работает отлично. Но тут наверное всё индивидуально и нужно по месту смотреть Smile

Аватар пользователя Xermit Xermit 30 июля 2011 в 1:38

Чем вам json так не угодил? Получайте его все также через старый jquery, парсите, а потом передайте полученные данные в новый код который юзает новый jquery, нет в этом проблем. json в старом формате надо получать все также ajax запросом от старой версии jquery.

Новая версия jquery просто дополняет старую, а сейчас кашу сделали из-за этого jquery-update. Когда часть друпала типа умеет новый jquery юзать и требует jquery-update dev версии, который на jquery-1.4 также глючит местами и конфликтует с старым кодом, а есть немалая часть друпала и модулей к нему которые ошибки выдают так как не переписаны и возможно не будeт переписаны никогда под новую версию jquery.

Друпал как юзал старые версии jquery так и юзает, а новые версии пускай используются в новом коде js для нового кода php, который вернет тот формат json который нужен.

Я на 7-ку еще не скоро перейду.

К тому же, часты ситуации, когда сайт вообще на каком нить 5-м друпале может крутится, а шашечки хотят прикрутить, которые требуют новый jquery и ui.
Кстати именно из-за визуальных шашечек весь сыр бор, а модные вещи defer удобны, но только slickgrid к примеру с новым модным jquery глючит при попытке мышью расширить столбец колонки.
И что мне в этом случае делать, да пожалуйста используйте хоть три версии jquery. И снова без каких либо патчей.

Аватар пользователя Xermit Xermit 30 июля 2011 в 1:43

Думаю мы друг друга не поняли, у меня jquery-update cтоит, но чисто так, чтобы функции его некоторые были доступны в api, сам он при этом по прежнему там какую то 1.2.6. версию содержит или может 1.3.2, но последний ui с ними не работает. потому я сделал свой способ. при этом сам друпал как работал со старым jquery так и пашет, а всем кому надо новый должны загрузить свои скрипты как я описал в статье.

Аватар пользователя Cyber Cyber 30 июля 2011 в 1:49

"Xermit" wrote:
Думаю мы друг друга не поняли, у меня jquery-update cтоит, но чисто так, чтобы функции его некоторые были доступны в api, сам он при этом по прежнему там какую то 1.2.6. версию содержит или может 1.3.2, но последний ui с ними не работает. потому я сделал свой способ. при этом сам друпал как работал со старым jquery так и пашет, а всем кому надо новый должны загрузить свои скрипты как я описал в статье.

Да всё «проще» делается. Ставим jQuery update, лезем в модуль, выпилваем то, что отвечает за вывод библиотеки и подключаем её руками. 6ка вполне стабильная и один патч сделать вообще не проблема, даже руками накатить, там всё понятно.(открываем патч редактором, смотрим номера строк и окружающий код, далее делаем замену и всё).

Правда тогда уже рациональнее выломать вывод jQuery из ядра и выкинуть нафиг jQuery апдейт предварительно положив все его замещающие JS в /misc. Biggrin

Вот такой хардкор Wink

Аватар пользователя Punk_UnDeaD Punk_UnDeaD 30 июля 2011 в 10:01

"Cyber" wrote:
Хм .. на самом деле не думаю, что особо актуально. Вообще тогда стоит и про defer(не выполнять пока не закончится парсинг и обработка) вспомнить.

разница в том, что я вижу перерисовку или не вижу

когда достройка в ready я вижу её чаще, когда в подвале без ready - значительно реже

появления плюсодинов - это не из другой области

Аватар пользователя arefkin arefkin 1 сентября 2011 в 17:12

Может кто-нибудь поподробней инструкцию на русском напишет как запустить s3slider ато чтото ну ни как не получается