Модули в хаках реализуют основной функционал - обработку страниц, реализацию задач планировщика и API-функций. В рамках MVC-модели они больше всего похожи на "контроллеры".
Создание модуля
Работа с модулями осуществляется из раздела "Модули" в меню "Файлы". Сами файлы модулей располагаются в папке mod
вашего хака. Название файла с модулем может состоять из маленьких латинских букв, цифр и дефиса. Нельзя использовать заглавные буквы и спецсимволы, в том числе знак подчёркивания.
В момент создания модуля, в файле автоматически вписывается его "стандартная" функция с рекомендуемым названием. Рекомендуется составлять название функции из слова hack
, названия модуля и названия самой функции, разделенных знаком подчёркивания, например: hack_proxy_list
.
Загрузка модуля происходит с помощью функции mod
основного класса хака:
$core->hack->(name)->mod( $module )
Например, подключение модуля listing
в хаке proxy
будет выглядеть так:
$core->hack->proxy->mod( 'listing' );
В момент подключения модуля, можно сразу же вызвать какую-либо содержащуюся в нём функцию. Это удобно для организации роутинга и быстрого запуска модулей. Вызываемая функция должна принимать только один обязательный параметр - $core
.
Подключение модуля с вызовом функции:
$core->hack->(name)->mod( $module, $func )
Например, вызов функции hack_proxy_list
в модуле listing
хака proxy
:
$core->hack->proxy->mod( 'listing', 'hack_proxy_list' );
При вызове модуля с названием функции, возвращается результат выполнения этой функции.
Возможные применения
Модули применяются в трёх основных задачах:
- Обработчики страниц и разделов. Используются для реализации роутинга, о котором рассказано ниже.
- Периодические задачи для планировщика в файлах
cron-name.php
. О них рассказано в разделе "Планировщик". - Приложения для API-интерфейса в файлах
api-name.php
. О них рассказано в разделе "API".
Организация роутинга
Модули оптимальны для организации роутинга в приложении. В файле start.php
создайте функцию, которая будет заниматься маршрутизацией. Она принимает на вход параметр $core
и должна вызывать нужный модуль при необходимости.
Текущий путь по сайту разбивается на несколько частей:
https://network.domain/div/item/subdiv/subitem
Эти элементы доступны для работы через $core->app
:
$core->app->div
- текущий раздел на сайте.$core->app->item
- элемент в выбранном разделе.$core->app->id
- целочисленное значение от$core->app->item
.$core->app->subdiv
- вложенный раздел элемента.$core->app->subitem
- вложенный элемент вложенного раздела.$core->app->subid
- целочисленное значение от$core->app->subitem
.$core->app->action
- значение из GET-параметра action, соответствует выбранному действию.$core->app->message
- значение из GET-параметра message, соответствует сообщению об успехе или ошибке действия.
В работе функции удобно применять значение $core->app->div
, которые соответствует первому пункту в текущем пути сайта. Пример реализации роутинга выглядит так:
function hack_proxy_route( $core ) { switch ( $core->app->div ) { case 'proxy-list': $core->hack->proxy->mod( 'listing', 'hack_proxy_list' ); case 'proxy-check': $core->hack->proxy->mod( 'listing', 'hack_proxy_check' ); case 'proxy-stats': $core->hack->proxy->mod( 'stats’, 'hack_proxy_stats' ); } }
При инициализации хака, эту функцию нужно указать в обработчике modules
. Это реализуется с помощью функции $core->handle( 'modules', $handlename )
, где в $handlename
указывается ваша функция.
Пример инициализации хака с роутингом:
function hack_proxy_init( $core ) { $core->handle( 'modules', 'hack_proxy_route' ); }