Перейти к содержанию

Хук integrate_simple_actions

Хук для работы со вспомогательными экшенами (например, с такими, которые используют вывод XML).

Расположение⚓︎

Sources/Load.php

<?php

call_integration_hook('integrate_simple_actions', array(&$simpleActions, &$simpleAreas, &$simpleSubActions, &$extraParams, &$xmlActions));

Sources/Theme.php

<?php

IntegrationHook::call('integrate_simple_actions', [&$this->simpleActions, &$this->simpleAreas, &$this->simpleSubActions, &$this->extraParams, &$this->xmlActions]);

Этот хук появился в 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-фидов и других легковесных страниц.

Комментарии