Публикация в группе: Плагин WP-Recall - Личный кабинет на WordPress

Категории группы: Обновления

Добавлено в закладки: 0

Приветствую!

На момент выхода этой заметки, релиза версии 16.7.0 плагина еще не было и то, что заметка о версии вышла раньше - неслучайно. В этой версии было решено обратить внимание на оптимизацию кода формирующего отправку и прием данных при ajax-запросах, а так как эти запросы пронизывают весь плагин и все базовые дополнения, то изменений в коде получилось слишком много, чтобы торопиться с выпуском обновления.

Кратко обрисую новые подходы, которые стали доступны при работе с ajax на стороне плагина и его дополнений.

Немного была оптимизирована стандартная регистрация callback-функции, теперь вместо:

можно записать

где второй аргумент "true" разрешает ajax-запрос к указанной функции гостям сайта, по-умолчанию - false.

Самое интересно происходит на стороне javascript, здесь для регистрации ajax-запроса появилась новая функция rcl_ajax(), она призвана заменить собой использование стандартного вызова jQuery.ajax(), упростив синтаксис и взяв на себя обработку возвращаемых данных.

Общий порядок работы с функцией выглядит так:

Вместо объекта в data можно передать и строку, тогда запись будет выглядеть так:

Из приведенного кода можно увидеть, что мы в data, как обычно, подготовили и указали данные для отправки в php-функцию 'my_function' и принимаем ответ в success для обработки. Таким образом, мы опустили необходимость указывать остальные параметры ajax-запроса, в том числе и url до файла admin-ajax.php, все это берет на себя функция rcl_ajax() и указывает в фоновом режиме. Также эта функция, кроме указанных в data данных, добавляет значение nonce, которое мы можем проверить на стороне php, вызвав функцию rcl_verify_ajax_nonce(), обеспечив тем самым относительную безопасность запроса.

Кроме того, использование функции rcl_ajax() содержит встроенный обработчик ответов, который может взять на себя обработку некоторых стандартных ответов из php callback-функции и вывести на экран результат этой обработки. Из этого вытекает важный нюанс: использование success внутри функции rcl_ajax() не обязательно. В связи с этим стоит упомянуть о некоторых важных правилах использования этой функции в своем коде:

  • для обработки в success ожидается только объект
  • некоторые свойства принимаемого объекта обрабатываются автоматически до срабатывания пользовательского success
  • result.error выводит уведомление с текстом ошибки и прекращает работу success
  • result.success и result.warning выводят уведомление с указанным текстом

Проще говоря, мы можем написать такой ajax-запрос, который не будет требовать написания своего обработчика ответа, на себя эту роль возьмет встроенный обработчик. Рассмотрим рабочий пример.

Зарегистрируем на стороне PHP функцию

Так как наша callback-функция возвращает лишь error и success, то они будут автоматически обработаны встроенным обработчиком на стороне JS, необходимости в их ручной обработке нет, поэтому указание success можно опустить. В результате, на стороне JS получим следующую запись:

Получилось очень просто и понятно. Все ответы из указанной callback-функции возьмет на себя встроенный обработчик и будет выводить стандартные уведомления от плагина WP-Recall.

На такой механизм работы были переведены все ajax-запросы внутри плагина и его базовых дополнений.

Эта версия также позволила немного доработать порядок использования JS-хуков, описанного ранее в статье. Теперь в хуки можно передавать неограниченное количество параметров и принимать их для обработки в указанные функции. Например:

Аналогично расширились возможности функции rcl_apply_filters().

Кстати, внутри функции rcl_ajax() при успешной отработке success, автоматически регистрируется хук с именем соотвествующем наименованию callback-функции, т.е. значению параметра action, который передается в data, хук передает полученный объект result. Это можно иметь ввиду и использовать для расширения поведения уже существующих ajax-вызовов через свой код.

Также не могу не сообщить о значительной доработке вывода дополнений на странице репозитория WP-Recall в административной части сайта. Теперь там допускается поиск нужного дополнения по метке, автору или слову, а также сортировка дополнений не только по обновлению, но и по популярности. Найти нужное дополнение стало гораздо проще.

Вот такие полезности добавляет новая версия плагина.

В связи с тем, что в коде плагина и его базовых дополнений было сделано много изменений, новая версия пока предлагается только с нашего GitHub-репозитория для ознакомления и тестирования.

 

7

Автор публикации

не в сети 19 минут

Андрей CS

12k

пока занят

Комментарии: 1710Публикации: 424Регистрация: 30-11--0001Продаж/Покупок: 15689/104