Знаю, что тема изъезжена но все же не могу понять в чем косяк.
В файле template.php подключаю bootstrap.js
function bartik_preprocess_page(&$variables){
drupal_add_js(drupal_get_path('theme', 'bartik') . '/js/bootstrap.js');
...
drupal_add_js(drupal_get_path('theme', 'bartik') . '/js/bootstrap.js');
...
При админе все ведет себя правильно, а вот при госте по какой-то причине код выполняется два раза.
Есть у кого какие соображения?
Комментарии
Народ, помогите пожалуйста. Реальная проблема. Как победить не понимаю.
Хотя бы подтолкните на какие-нибудь мысли. Плагины разные отключать пробовал, не помогло.
Можно пойти путем и переписать код с использованием костылей (доп. классов), но я ведь библиотеку бутстрап как раз для простоты разработки прикрепил.
На основании какой информации строить предположения?
Какой код 2 раза выполняется?
Логи js-консоли браузера..
Стек вызова функций..
и т.д.
Вводная информация к сожалению только одна.
Это то, что под залогининым пользователем все работает, а под гостем нет.
Конкретно, у меня глючит bootstrap.js, который подключается в файле template.php
А именно при клике на раскрывающие элементы (data-toggle=dropdown) он обрабатывает два клика, вместо одного, и элемент мгновенно закрывается обратно.
Лог js-консоли чист.
Спасибо, что отозвались, сейчас пойду гуглить про стек вызова функций, что это и как узнать.
Но я грешу на кэш. Хотя галочка "Кэшировать страницы для анонимных пользователей" не стоит и объединения js-фалов тоже нет.
Что еще больше запутало, так это то, что на компьютере заказчика все работает.
Проверил на нескольких других компах и в разных браузерах. Все также, под гостем глючит.
Может тут jQueryUpdate замешан? Я его отключал, но не удалял. Никаких изменений не было.
Простите, что опять поднимаю тему. Но все проблема все не решается.
Но нашел ряд странностей.
В тему вставил hook_js_alter. Оказалось, что он исполняется 3 раза.
Еще нашел статью на англ. и вроде как по теме, но что-то до конца понять не могу.
http://drupal.stackexchange.com/questions/23983/drupal-add-js-causes-blo...
Ура!!!
Помог перенос функции drupal_add_js() из хука _preprocess_page в хук _preprocess_html
Если кто знает нюансы такого поведения друпала (про хуки) был бы рад послушать или почитать.
Отвечу про нюансы, которые произошли при таком решении.
В хуке _preprocess_html библиотека bootstrap.js стала подключаться самой последней. Поэтому вызову функций из библиотеки через javascript уже полностью доверять нельзя. Возможно можно их вызывать в конце шаблонов, но я так не делал.
Зато, все стало отлично работать, если вызывать эти функции через атрибуты 'data-target' и др. В документации все написано.