Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

[3.3] [JQuery/Ajax] "Аяксификация" штатными средствами phpBB

Форум для авторов расширений для phpBB. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16367
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1745 раз

[3.3] [JQuery/Ajax] "Аяксификация" штатными средствами phpBB

Сообщение rxu »

В phpBB имеются некоторые встроенные средства для организации исполнения скриптов без перезагрузки страниц. В целом всё выглядит просто - достаточно добавить в активируемый элемент свойство data-ajax и организовать обработку.
Рассмотрим на примере.
В любой активируемый элемент, например, гиперссылку, добавляем data-ajax="my_custom_handler":

Код: Выделить всё

<a href="#" data-ajax="my_custom_handler">Это ссылка</a>
Здесь data-ajax="my_custom_handler" - имя функции-обработчика в скрипте JQuery. Имя может быть любым. Создаем файл скрипта, например, ext/vendor/ext_name/template/my_ajax.js:

Код: Выделить всё

/* global phpbb */

(function($) {  // Avoid conflicts with other libraries

'use strict';

phpbb.addAjaxCallback('my_custom_handler', function(res) {

// Используем всю мощь JQuery здесь

});

})(jQuery); // Avoid conflicts with other libraries
В теле обработчика можно использовать все возможности JQuery - добавлять/изменять/удалять любые элементы DOM страницы.

При необходимости, в скрипт можно передавать результаты работы вызываемого при активации элемента скрипта PHP:

Код: Выделить всё

				if ($this->request->is_ajax())
				{
					$data = [
						'mode'				=> 'mode',
						'post_id'			=> $post_id,
						'l_colon'			=> $this->language->lang('COLON'),
					];

					$json_response = new \phpbb\json_response();
					$json_response->send($data);
				}
Здесь условие $this->request->is_ajax() выполняется в случае, если вызов происходит из функции-обработчика JQuery, в данном случае - из my_custom_handler. В результате данные из массива $data будут переданы в обработчик и могут быть использованы через пареметр res:

Код: Выделить всё

/* global phpbb */

(function($) {  // Avoid conflicts with other libraries

'use strict';

phpbb.addAjaxCallback('my_custom_handler', function(res) {

var mode = res.mode;
var post_id = res.post_id;
var l_colon = res.l_colon;

// Используем всю мощь JQuery здесь

});

})(jQuery); // Avoid conflicts with other libraries
Подключаем скрипт на странице стандартным способом:

Код: Выделить всё

{% INCLUDEJS '@vendor_ext_name/my_ajax.js' %}
Таким образом, получаем полный цикл обработки: активация элемента HTML - вызов обработчика JQuery - вызов скрипта PHP - передача данных в формате JSON из скрипта PHP в обработчик JQuery - модификация DOM страницы обработчиком.
Изображение

Вернуться в «Для разработчиков»