Хук integrate_pre_load

Данный хук предназначен для запуска нужных пользователю функций после выполнения хука integrate_pre_include

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

Load.php

    call_integration_hook('integrate_pre_load');

Как видим, хук не имеет параметров; в нем доступны для использования любые переменные, определенные до его вызова.

Использование

Подключение хука через базу данных:

Хуки легко подключаются с помощью PHP-файла (например, hooks.php), вызываемого при установке/удалении вашего приложения:

<?php

if (file_exists(dirname(__FILE__) . '/SSI.php') && !defined('SMF'))
    require_once(dirname(__FILE__) . '/SSI.php');
elseif (!defined('SMF'))
    exit('<b>Error:</b> Cannot install - please verify you put this in the same place as SMF\'s index.php.');

$hooks = array(
    'integrate_pre_include' => '$sourcedir/MyApplication.php',
    'integrate_pre_load'    => 'example_function'
);

if (!empty($context['uninstalling']))
    $call = 'remove_integration_function';
else
    $call = 'add_integration_function';

foreach ($hooks as $hook => $function)
    $call($hook, $function);

В SMF 2.1 путь к файлу, содержащую нужную функцию, можно указывать сразу перед названием функции, используя вертикальную черту в качестве разделителя (то есть хук integrate_pre_include не обязателен):

<?php

if (file_exists(dirname(__FILE__) . '/SSI.php') && !defined('SMF'))
    require_once(dirname(__FILE__) . '/SSI.php');
elseif (!defined('SMF'))
    exit('<b>Error:</b> Cannot install - please verify you put this in the same place as SMF\'s index.php.');

$hooks = array(
    'integrate_pre_load'  => '$sourcedir/MyApplication.php|example_function'
);

if (!empty($context['uninstalling']))
    $call = 'remove_integration_function';
else
    $call = 'add_integration_function';

foreach ($hooks as $hook => $function)
    $call($hook, $function);

В примерах выше происходит добавление хука integrate_pre_load, подключающего функцию example_function, находящуюся в файле /Sources/MyApplication.php. $sourcedir — глобальная переменная, содержащая полный путь к директории /Sources форума. Вместо $sourcedir можно использовать переменную $boarddir, содержащую путь к корню форума. Информация об указанных хуках добавляется в базу данных (таблица smf_settings).

Пример функции example_function (файл MyApplication.php)

<?php

if (!defined('SMF'))
    die('Hacking attempt...');

function example_function()
{
    echo 'Hello, world!';
}

Подключение хука путем вызова в PHP-файле:

Не применимо. Используйте другие рассмотренные варианты.

Подключение хука в package-info.xml:

В SMF 2.1 добавлена возможность указания хуков в package-info.xml. Например, для выполнения хука integrate_pre_load при установке мода достаточно добавить в секцию install строчку hook:

    <install for="SMF 2.1 RC1, 2.1 - 2.1.99">
        <hook hook="integrate_pre_load" function="example_function" file="$sourcedir/MyApplication.php" />
    </install>

При удалении мода используется та же строчка, но с дополнительным параметром reverse:

    <uninstall for="SMF 2.1 RC1, 2.1 - 2.1.99">
        <hook hook="integrate_pre_load" function="example_function" file="$sourcedir/MyApplication.php" reverse="true" />
    </uninstall>

На мой взгляд, это идеальный хук для вызова других хуков, которые можно подключать через PHP файл:

function hooks()
{
    add_integration_function('integrate_pre_load_theme', 'preLoadTheme', false);
    add_integration_function('integrate_load_theme', 'loadTheme', false);
    // и так далее
}

function preLoadTheme()
{
    // ваш код
}

function loadTheme()
{
    // ваш код
}

В примере выше в функции hooks подключаются нужные вам хуки. Предполагается, что сама функция hooks подключается при установке мода через hooks.php или package-info.xml. То есть при обновлении форума достаточно будет заново подключить функцию hooks через соответствующий хук, а уже она запустит все остальные упомянутые в ней функции.

Скачать пример мода для SMF 2.0 Скачать пример мода для SMF 2.1

Поделиться
Отправить
Класснуть
Вотсапнуть