Хук integrate_actions
Хук integrate_actions позволяет разработчикам модов добавлять собственные экшены (actions) в движок форума без необходимости редактирования ядра SMF.
Расположение⚓︎
Хук принимает в качестве параметра массив, в котором содержится список экшенов, перехватываемых переменной $_REQUEST['action']. Например, запись $actionArray['calendar'] = ['Calendar.php', 'CalendarMain'] означает, что при переходе по адресу /index.php?action=calendar происходит вызов функции CalendarMain из файла Calendar.php.
Назначение⚓︎
В SMF весь пользовательский интерфейс построен на работе с экшенами. Экшен — это конкретная операция или страница, которая вызывается через параметр ?action=something в URL.
Примеры стандартных экшенов в SMF: login, register, profile, pm, admin и многие другие.
Хук integrate_actions нужен, чтобы сообщить движку о существовании вашего нового, кастомного экешна. Вы «регистрируете» его в системе.
Без этого хука, если вы просто создадите файл и попытаетесь перейти по ссылке ?action=my_action, SMF выдаст ошибку Unknown action, потому что он не зарегистрирован в списке допустимых экшен движка.
Использование⚓︎
<?php
if (! defined('SMF'))
die('No direct access...');
class YourModName
{
// В этой функции подключаем используемые хуки
public function hooks(): void
{
add_integration_function('integrate_actions', self::class . '::actions#', false, __FILE__);
}
// Регистрируем собственный экшен
public function actions(array &$actions): void
{
// Подключаем метод из этого же класса
$actions['my_page'] = [false, [$this, 'myPageAction']];
// Альтернативный синтаксис, в котором указываем файл в директории Sources
// и функцию, которая должна вызываться
// $actions['my_page'] = ['YourModName.php', 'myFunction'];
}
// Эта функция вызывается при переходе по адресу /index.php?action=my_page
public function myPageAction(): void
{
// Здесь можно подключить свой шаблон и выполнить любые другие действия
print_r('Моя страница');
}
}
Хук integrate_actions — это важный инструмент для расширения функционала SMF. Он является мостом, который соединяет ваши кастомные страницы (экшены) с маршрутизацией движка. Без него система просто не узнает о существовании вашего ?action=something и не поймет, какой код нужно выполнить.