Ajax

Статьи по теме ajax

Drupal ajax страницы без перезагрузки

mbaev 14.11.2016, 16:19

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

Для примера, можно сёрфить по нодам в блоге или переходить из редактирования ноды в режим просмотра ноды. В большей степени, продолжают корректно работать ajax-ссылки, созданные, например, с помощью views.

Обновление представления (views) через ajax

mbaev 13.10.2016, 13:53

Заставить работать какую-либо вьюху с ajax не сложно. Достаточно зайти в настройки и установить параметр Use Ajax: Yes.
ajax-view

К сожалению, модуль Views не предоставляет JS API для программного обновления этой вьюхи. Поэтому, пишем свою функцию (комментарии в коде):

Как переопределить поведение ajax-ссылки

mbaev 07.04.2016, 13:16

Многим известно, что в Drupal'е есть собственный ajax-фреймворк, который использует в качестве ответов, так называемые, команды. Сами запросы могут быть инициированы разными способами:

  1. Присвоив класс use-ajax на любой тэг (на стороне сервера или на стороне клиента, но перед инициализацией Drupal js части). В базовом использовании этого варианта есть обязательное условие - тэг должен иметь атрибут href содержащий путь, на который будет выполнен ajax запрос.
  2. Определив параметр #ajax в форме (на стороне сервера).
  3. Присвоив параметр use-ajax-submit форме (тэг form). Это что-то среднее между п.1 и п.2.
  4. Инициировав new Drupal.ajax() (на стороне клиента)

Изменение поведения ajax-обработчика

Рассмотрим пример с ссылкой, на которой есть класс use-ajax. Мы будет изменять состояние bootstrap кнопки на момент выполнения запроса - пример.
Наша вымышленная страница содержит такой тэг:

Ajax фильтрация и сортировка таблиц

mbaev 19.02.2014, 14:46

При работе форм через ajax callback функция вызывается по пути "system/ajax". Если в форме есть таблица с сортировкой, то все ссылки в хидере таблицы и пагинаторе будут начинаться с system/ajax. Чтобы избежать этого можно сделать так: