Файл запуска подключается в момент инициализации хака. Он отвечает за предварительные настройки хака и подготовку обработчиков.
Массив конфигурации
Файл инициализации хака должен заканчиваться возвратом массива, который содержит конфигурацию хака: функции запуска, обработчики доставки и рекламных сетей, задачи планировщика, API-функции.
Ключами этого массива будут названия соответствующих конфигураций. Значениями — массивы со списком файлов, функций или настроек. Если функция или файл представлены в единичном экземпляре, можно использовать строку вместо массива.
Доступные ключи:
init— функция инициализации хака.api— список файлов приложений для API.api-auth— настройки авторизации для API-функций (всегда только массив).cron-1min— список файлов для планировщика, выполняемого раз в минуту (быстрые задачи).cron-3min— список файлов для планировщика, выполняемого раз в 3 минуты (задачи высокой длительности).cron-10min— список файлов для планировщика, выполняемого раз в 10 минут (задачи средней длительности).cron-1day— список файлов для планировщика, выполняемого раз в сутки (очень долгие задачи).tpl— переопределение системных шаблонов.lib— переопределение системных библиотек.delivery— обработчики служб доставки.adv— обработчики рекламных сетей.
Пример возвращаемого массива:
return [ 'init' => [ 'hack_proxy_init'], 'api' => [ 'proxy', 'wm' ], 'api-auth' => [ [ 'proxy', [ 'check', 'list', 'add', 'del' ], [ 'wm', 'getproxy' ] ], 'cron-3min' => [ 'checker' ], ];
Функция инициализации
Сразу после загрузки всех модулей, система запускает их функции инициализации.
В задачи функции входит подготовка всех обработчиков, которые используются в системе. Не рекомендуется при инициализации совершать какие-либо сложные действия.
Пример функции инициализации:
function hack_proxy_init( $core ) {
$core->handle( 'modules', 'hack_proxy_route' );
$core->handle( 'menu', 'hack_proxy_menu' );
}
Обработчики и фильтры
Инструментарий фильтров и обработчиков позволяет реализовать вызов функций и изменение некоторых данных на лету.
Новый обработчик добавляется функцией handle:
$core->handle( $place, $function );
Где $place — место обработчика, а $function — название вызываемой функции.
Например:
$core->handle( 'modules', 'hack_proxy_route' );
В системе существует множество точек, к которым можно прицепиться. Вот некоторые наиболее полезные из них:
modules— место для установки функций роутинга, выполняется перед системным роутингом.actions— место для подготовительных действий, выполняется прямо перед обработчиками modules.menu— фильтр, готовящий навигационное меню. Принимает меню вторым параметром и должен возвращать дополненный вариант.newmenu— фильтр постобработки меню. Выполняется над готовым массивом меню.header— выполняется перед выводом верхнего блока сайта, после подготовки блока.footer— выполняется перед выводом подвала сайта, после подготовки блока.medialibs— фильтр списка библиотек для загрузки файлов.
Уточняйте наличие нужного вам фильтра или обработчика у технической поддержки. Новые фильтры могут быть добавлены по вашему запросу, если это будет целесообразно.
Пример готового файла запуска
Вот так бы выглядел файл запуска для хака с названием proxy, у которого есть несколько разделов, API с авторизацией и задачи планировщика.
<?php
// Startup
function hack_proxy_init( $core ) {
$core->handle( 'modules', 'hack_proxy_route' );
}
// Routing
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' );
}
}
// Configuration
return [
'init' => [ 'hack_proxy_init'],
'api' => [ 'proxy' ],
'api-auth' => [
[ 'proxy', [ 'check', 'list', 'add', 'del' ],
],
'cron-3min' => [ 'checker' ],
'cron-1day' => [ 'stats' ],
];