Хук integrate_simple_actions
Хук для работы со вспомогательными экшенами (например, с такими, которые используют вывод XML).
Расположение⚓︎
Sources/Load.php
Этот хук появился в SMF 2.1 и предназначен, помимо прочего, для указания простых экшенов, при переходе к которым форуму не требуется загружать весь шаблон целиком. Например, это всплывающие окна типа профиля, справочной информации, поиска пользователя по имени и т. п.
Назначение⚓︎
Это хук, который позволяет вам зарегистрировать собственное «простое» действие (action) в SMF. «Простое» — ключевое слово. Он предназначен для действий, которые:
- Не требуют загрузки полного ядра форума. Это самое главное отличие.
- Не нуждаются в шаблонах, меню, профилях пользователей и других тяжелых компонентах SMF.
- Обычно возвращают простые данные: JSON, XML, текст, или выполняют простое перенаправление.
- По сути, это легковесный эндпойнт, который работает максимально быстро.
Принцип работы⚓︎
Чтобы понять его силу, давайте сравним пути обработки запроса.
Обычный экшен (через integrate_actions):
- Запускается index.php.
- Загружаются ВСЕ основные файлы SMF: Settings.php, Load.php (база данных, безопасность, функции и т.д.).
- Загружаются все хуки, инициализируется пользовательская сессия.
- Определяется, какое действие (
?action=...) запрошено. - Ваша функция-обработчик, объявленная в
integrate_actions, вызывается. - Загружаются темы, шаблоны и т. д.
Простой экшен (через integrate_simple_actions):
- Запускается index.php.
- Загружается только Settings.php (для подключения к БД может потребоваться, но не всегда).
- Проверяется, не является ли запрошенное действие «простым».
- Если это простое действие, загрузка ОСТАНАВЛИВАЕТСЯ. Файл Load.php и всё остальное НЕ загружается.
- Вызывается только ваша функция-обработчик для этого простого действия.
- После выполнения вашей функции работа скрипта завершается.
Итог сравнения: integrate_simple_actions невероятно быстрый и экономит ресурсы, потому что избегает загрузки тонны ненужного для простой задачи кода.
Использование⚓︎
Идеальные случаи для применения integrate_simple_actions:
- AJAX-обработчики: Самый частый случай. Ваш JavaScript делает запрос к форуму, чтобы получить данные без перезагрузки страницы (лайки, подгрузка комментариев, проверка ника, голосования).
- API-эндпойнты: Создание простого API для внешних приложений, которое возвращает данные в формате JSON/XML (например, последние темы, информация о пользователе).
- Вебхуки (Webhooks): Обработка входящих запросов от других сервисов (например, обработка уведомлений от платежной системы).
- RSS-ленты: Создание кастомной RSS-ленты без загрузки всей темы.
- Простое перенаправление или скачивание файла.
<?php
if (! defined('SMF'))
die('No direct access...');
class YourModName
{
// Подключаем используемые хуки
public function hooks(): void
{
add_integration_function('integrate_simple_actions', self::class . '::simpleActions#', false, __FILE__);
}
// Например, в последней версии Optimus через этот хук загружается xml-карта форума
public function simpleActions(&$simpleActions, &$simpleAreas, &$simpleSubActions, &$extraParams, &$xmlActions): void
{
global $modSettings;
if (! empty($modSettings['optimus_sitemap_enable'])) {
$xmlActions[] = 'sitemap';
}
}
}
Хук позволяет добавлять новые простые действия и области, которые не требуют полной загрузки темы оформления, что полезно для создания AJAX-запросов, XML-фидов и других легковесных страниц.