Drupal Русскоязычное сообщество
На страницах с результатами поиска и добавления материала не работают мои jQuery функции.
URL страниц следующие:
mysite/search/node/ — результаты поиска
mysite/node/add — добавления материала
Похоже на то, что когда запускаются некоторые модули, они отключают кастомные jQuery функции. Материалы на сайт добавляю только я, потому с этим легко смириться, но на результаты поиска сможет посмотреть любой посетитель сайта.
Думал, может на этих страницах путь к файлу со скриптами изменился. Но нет, простые JS функции работают, я проверял с помощью alert().
Как исправить этот досадный баг? Заранее спасибо.
P.S. На моем сайте работают 2 версии jquery. Возможно, это важно. На обычных контентных страницах всё отлично работает. Подключаю их следующим образом:
- Drupal6
- Есть вопрос
- Блог
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Комментарии
1. Что именно такого вы используете, чего нет в старом jQuery?
2. Функции, которые не работают в студию.
alert работает, потому что это не jQuery, а чисто JavaScript-метод.
чтоб тестировать jQuery с помощью alert — вызывайте alert(‘jQuery-метод’), вместо alert(‘йа работаю’)
1. На данный момент, абсолютно ничего. Сейчас я делаю простой блог, но на более сложных проектах, возможно, потребуются более сложные функции. Да и просто хотелось бы использовать последнюю версию jQuery — ведь это главная рекомендация даже на их официальном сайте!
2. Нет смысла выкладывать неработающие функции, потому что они все не работают.
3. Я знаю. Таким образом я проверял, работает ли вообще JS из моего внешнего файла.
Установите модуль jQuery Update, он обновит jQuery до 1.3.2. В новой версии нет ничего такого, чего нельзя было сделать в старой. Только кое-что стало удобней (по большей части касаемо AJAX и еще несколько моментов, которые вряд ли вам пригодятся, если вы не очень опытный в jQuery-framework), для AJAX в друпал встроен AHAH-фреймворк, который отлично работает.
Если у вас найдется какое-нибудь место, которое будет работать в 1.6.1, но не будет работать в 1.3.2 — пишите, я расскажу что да как изменить, там ничего сложного нет.
Ок
Источник
Drupal Русскоязычное сообщество
Всем првиет! Подскажите мне пожалуйста как подключить js в тему друпала 8-го мой либрарис.ямл выглядит так
ксс работает, js не работает. Чо я не так делаю?
- Drupal8
- Тему верстали
- Есть вопрос
- Решение проблем
- Блог
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Лучший ответ
Напишу для таких же как я
Я элементарно не мог понять, что за объявление вначале global-styling:
Это название библиотеки которую в свою очередь мы подключаем в моятема.info.yml
у меня было несколько js-ок и я их просто разделил по разным библиотекам в моятема.libraries.yml
Вот так:
js-navtop:
header : true
js:
js / navbar-ontop.js: < minified: true >
dependencies:
— core / jquery
js-animate:
header : true
js:
js / animate-in.js: < minified: true >
dependencies:
— core / jquery
js-footer:
js:
js / smooth-scroll.js: < >
dependencies:
— core / jquery
— core / jquery.once
которые затем подключил в моятема.info.yml, так:
Так, заработало.
Источник
Drupal Русскоязычное сообщество
Вот код js для адаптивного меню.
($(function() <
var pull = $(‘#pull’);
menu = $(‘navigaton ul’);
menuHeight = menu.height();
$(pull).on(‘click’, function(e) <
e.preventDefault();
menu.slideToggle();
>);
$(window).resize(function() <
var w = $(window).width();
if(w > 320 && menu.is(‘:hidden’)) <
menu.removeAttr(‘style’);
>
>);
>))(jQuery);
Возможно как то не так подключаю его. Подскажите пожалуйса где не правильно делаю. В libraries.yml добавил файлик js.
- Drupal8
- Есть вопрос
- Блог
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Комментарии
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
так надо подключать надо в theme.libraries.yml?
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
вот в файле theme.libraries.yml
global:
version: VERSION
css:
base:
css/base/base.css: <>
layout:
css/layout/layout.css: <>
component:
css/components/components.css: <>
theme:
css/theme/theme.css: <>
css/theme/media.css: <>
css/theme/print.css: < media: print >
js:
js/modernizr.js: <>
js/build/scripts.js: <>
js/menu.js: <>
dependencies:
— core/jquery
— core/drupal.ajax
— core/drupal
— core/drupalSettings
— core/jquery.once
Консоль смотрели? Ваш код очевидно должен сработать на jQuery(document).ready() Добавляли эту обертку?
jQuery(document).ready($(function() <
var pull = $(‘#pull’);
menu = $(‘navigaton ul’);
menuHeight = menu.height();
$(pull).on(‘click’, function(e) <
e.preventDefault();
menu.slideToggle();
>);
$(window).resize(function() <
var w = $(window).width();
if(w > 320 && menu.is(‘:hidden’)) <
menu.removeAttr(‘style’);
>
>);
>));
Добавил сейчас так, не работает.
А где смотреть консоль и что там смотрится?
Ссылку дайте на страницу
$(‘navigaton ul’); — тут явно ошибка, скорее всего $(‘#navigaton ul’) или $(‘.navigaton ul’);
http://sitesun.ru/
меню должно при мальеньком экране при клике раскрываться, а этого не происходит.
$(‘#navigaton ul’) не помогло
Как я и предполагал, квери нет (см. скриншот).
Что-то вы намудрили с подключением, посмотрите примеры в доках.
хм. это получается я не правильно его подключил в файлике библиотек? или его еще где то подключать надо?
хорошо, посмотрю) спасибо за помощь, теперь хоть буду знать куда копать))
Не за что, скачайте любую тему под восьмерку и посмотрите как в ней реализовано подключение.
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Действительно, не правильно подключал. Я все в одну библиотеку засовывал. Сейчас сделал в разных и все заработало! Спасибо)
Источник
Drupal Русскоязычное сообщество
К теме оформления Drupal 8 прикрепляю скрипт на Jquery. Скрипт работает нормально, НО — на определенных страницах отваливается. Работает нормально на главной, страницах с путями типа node/NID и т. п. На страницах с кастомными путями — например перезаписанными модулем Pathauto, страницах Представлений и т. д. — не работает. Куда копать?
Комментарии
Подключаю таким образом:
1. Помещаю библиотеку в корень папки темы — папка my-library.
2. Добавляю библиотеку в файле MYTHEME.libraries.yml —
my-library:
css:
theme:
my-library/css/my-library-style.css: <>
js:
my-library/js/my-library.js: <>
3. Подключаю библиотеку в файле MYTHEME.info.yml:
libraries:
— ‘my-theme/my-library’
Вроде бы добавленная так библиотека должна работать на всех страницах сайта, не?
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
3. Подключаю библиотеку в файле MYTHEME.info.yml:
— ‘my-theme/my-library’
Вроде бы добавленная так библиотека должна работать на всех страницах сайта, не?
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
А разве нельзя библиотеку помещать в отдельную папку? Или нужно обязательно помещать css и js файлы библиотеки в папки css и js темы оформления?
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Если вам нужна директория для библиотек то её размещают в корне сайта
/libraries
и уже из скриптов в модуле или в своей теме ссылаются на библиотеки в этой директории
Если вам нужно просто свой скрипт подключить в теме, то и подключайте его в файле theme.libraries.yml как написано выше.
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Странно, подключил как вы сказали — переместил файлы js и css в одноименные папки темы, подключил их в библиотеке global-styling, почистил кэш — но скрипт продолжает отваливаться на страницах с кастомными путями.
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
в приводимом примере я имел в виду что нужно прописать сам файл, а не библиотеку. большой разницы нет в одноименной папке лежит файл или в корне темы. это зависит от ваших предпочтений организации структуры темы.
по идее скрипт должен работать на всех страницах, так как он выводится в js-placeholder token= «<< placeholder_token|raw >>» > в файле html.html.twig , который и формирует html документ для всех страниц сайта
Консолька в браузере что- нить пишет по этому поводу, когда скрипт не работает?
Можете попробовать просто для проверки в лоб подключить скрипт в этом файле как обычно подключают в html через тег script src= «path-to-your-script» >
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Спасибо коллега, уже решил проблему! Фишка была в том что файл из библиотеки был подключен НИЖЕ ФАЙЛА js, в котором вызывалась функция из библиотеки, соответственно выдавалась в консоли ошибка blablabla is not a function.
Источник
Почему не срабатывают скрипты Jquery в Drupal 7?
Собственно говоря, чем мы сегодня займёмся понятно из названия этой статьи. Раньше в Drupal 6, я писал свои скрипты и подгружал их к страницам сайта без особых проблем – правильно написанный скрипт всегда работал без сбоев. Но при переходя на Drupal 7, столкнулся с такой проблемой, что мои, замечу синтаксически правильно написанные скрипты отказывались работать под семёркой. Пришлось лесть опять в Api Drupal и более внимательно перечитывать, что они там понаделали.
Распишу всё на конкретном примере: Допустим мы хотим свернуть «стандартное меню навигации» по клику по какому то элементу на странице. С первого взгляда очень даже простая задача.
Приступим. В примере я использую стандартный шаблон «Bartik». Для начала нам необходимо определиться кликая по какому элементу на странице у нас будет происходить сворачивание меню навигации, я предлагаю создать свой элемент, в качестве которого у нас будет выступать просто текст. Для этого открываем файл нашей темы page.tpl.php и перед выводом левого сайдбара впишем свой элемент и присвоим ему id под названием « clickFirst».
Теперь приступим к написанию самого скрипта. Создадим текстовый файл с название « myscript.js», его содержание вот такое:
Естественно для его выполнения нужна ещё и библиотека Jquery, я использовал 1.8, скачать можно с официального ресурса. И как бы на этом наша работа должна была бы и закончиться, остаётся только подключить нашу новую библиотеку Jquery и скрипт myscript.js к сайту. Как правильно подключать скрипты можно почитать вот здесь, я на этом останавливаться не буду.
Итак скрипты закинули на сервер, подключили через info файл и смотрим, что у нас получилось на сайте. Видим, что новый элемент появился, но он не на что не реагирует, а Firebug выдал ошибку скрипта, хотя скрипт совершенно правильный:
Так в чём же проблема? А проблема в том, что разработчики теперь требуют производить вызов функции через так называемый « noconflict», нужен он для того, что бы скрипты написанные под старые версии Jquery не конфликтовали с новыми, которые допустим как я написал из под Jquery 1.8. Т.е. теперь для вызова какой то функции в Jquery необходимо применять конструкцию вместо:
Теперь всё становится более ясно, давайте так и сделаем как говорит нам API. Новая конструкция очень длинная и при написании длинного скрипта будет очень не удобной, поэтому я предлагаю запихнуть её в переменную, допустим dr. Для этого создадим ещё один файл с название « noconflict.js» где его содержимое будет таким:
И так же подключим его через « info» файл к нашим страницам на сайте. И теперь нам осталось лишь переписать вызов функции исходя из нашей переменной, которая лежит в файле « noconflict.js». Открываем файл « myscript.js» и пишем следующее:
И теперь смотрим, что у нас на сайте получилось
Источник