Всё об AJAX в Drupal 7. Drupal Camp Minsk 2012.

Опубликовано: 24.12.2017

видео Всё об AJAX в Drupal 7. Drupal Camp Minsk 2012.

drupal ajax error

14 апреля 2012 года в моём родном городе Минске прошёл очередной Drupal Camp. На нём я рассказывал об AJAX в семьмой версии Drupal. Видео прилагается:

А ниже предоставлен подробный план, по которому я рассказывал.



Введение

Ни для кого не секрет, что уже наступил 2012 год. Технологии развиваются семимильными шагами, и направление веб разработок, являясь одним из самых востребованных на сегодняшний день, в этом не отстаёт. Современные пользователи очень быстро привыкают к хорошему. Если раньше они были готовы сидеть и ждать по 10-15 секунд загрузки простой страницы, то сейчас же среднее время ожидания загрузки – 2 секунды, после чего вкладка с сайтом закрывается и открывается другой. Одной из технологий, ускоряющей процесс обновления обмена данными между пользователем и сервером стал AJAX . За счёт того, что страница обновляется не полностью, а лишь частично, что позволяет сэкономить время ожидания пользователя, AJAX стал крайне популярен среди веб разработчиков.


Ajax Forms Tutorial #1 : Partial Refresh (Drupal Tutorial)

AJAX расшифровывается как Asynchronous Javascript and XML. Из названия можно заметить, что должен использоваться как javascript , так и xml . Те инструменты по работе с AJAX , которые находились ядре шестого Друпала, вместо XML использовал обычные HTML вставки. Поэтому там эта технология назвалась AHAH - Asynchronous HTML and HTTP. Реализация этой технологии в шестёрке имела ряд минусов:

Изменение только одной области страницы.

Как я уже говорил, в шестёрке пользователю возвращается кусок HTML кода, который просто вставляется в указанный селектор. Это порождает некоторые неудобства, когда хочется изменить данные не только в рамках выбранного селектора, но и, например, обновить счётчик данных. Простейший пример с комментариями – если я добавил новый комментарий, я хочу, чтобы счётчик комментариев на странице материала увеличился. Из коробки так делать нельзя, приходилось писать js плагин к ajax-обработчику, который на ответе от сервера увеличивал бы этот счётчик. Ну а если хотелось не просто увеличить счётчик, а ещё и какой-нибудь контент добавить, то тут уже начинались серьёзные проблемы в реализации. Нет инструментов, позволяющих динамически загрузить новый css, js или изменить Drupal.settings.

Здесь всё предельно просто – в шестёрке просто нет возможности динамически работать с css или js. Конечно, можно было добавлять его просто куском кода на странице, но это не совсем удобно, и, говоря языком Друпала, не кошерно. А если же хотелось изменить данные в Drupal.settings, то приходилось пользоваться костылями. Механизм по перезагрузке полей формы приходится писать самостоятельно.

Данные в форме могут обновляться. Например, в зависимости от выбранной страны подгружать список городов. Это и быстро, и удобно. Однако Друпал – система с высоким уровнем безопасности. При каждой отправке формы с клиентской стороны на серверную Друпал сверяет полученные данные с теми, которые он отдавал пользователю (они берутся из кеша). И если в форме данные обновлялись, а в кеше - нет то Друпал заявлял, что он эту форму не создавал, и показывал пользователю ошибку. Для того, чтобы этого избежать, форму надо сохранять в кеше каждый раз после её изменения. В шестёрке такое кеширование не было реализовано, поэтому не все разработчики справлялись с реализацией перезагрузки форм. Нет возможности загрузить новую форму через AJAX, которая также использовала бы AJAX

К сожалению, в шестой версии Друпала этого сделать было просто нельзя. Форма, которая загружалась через AJAX, загружалась уже поддержки AJAX’a. Нет единой страницы для AJAX callback'a форм.

По своей сути, AJAX в формах всегда работает по одному принципу: передача данных с клиента на определённую страницу сайт; последующая загрузка формы из кеша; обработка формы; возвращение данных в формате json. В шестом Друпале каждый модуль, работающий с AJAX’ом, вынужден был создавать свою страницу, которая обрабатывала данные, переданные с помощью ajax. По хорошему, это включало в себя не просто создание страницы через hook_menu(), но и проверку полученных данных на валидность, на уязвимости и т.д. В добавок ко всему ещё и сеошникам приходилось следить за этими страницами, т.к. если их не закрыть в robots.txt, то поисковики с удовольствием их проиндексируют и пометят как «Формат документа не поддерживается».

Работа с AJAX в формах (интеграция с Forms API)

AJAX может добавляться практически к любому элементу формы, который несёт в себе какой-либо функционал. Например, textfield , select , tableselect , password , submit и т.д. Делается это добавлением к элементу атрибута #ajax с указанием пути или колбэка, по которому будут переданные данные.

IRC (Internet Relay Chat)
rss