Как подключать хуки

Данный материал является вспомогательным для серии статей «Список хуков». Здесь рассмотрены оптимальные варианты подключения и вызова хуков в модификациях для SMF.

Основы

Когда вы используете хуки в своих модификациях, их требуется добавлять в базу данных при установке. Например, укажем список нужных хуков в файле hooks.php:

$hooks = array(
    'integrate_pre_include' => '$sourcedir/Class-YourModName.php',
    'integrate_pre_load' => 'Class-YourModName::hooks'
);

if (!empty($context['uninstalling']))
    $call = 'remove_integration_function'; // При удалении модификации информация о хуке удаляется из базы
else
    $call = 'add_integration_function'; // При установке модификации информации о хуке добавляется в базу

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

Не забудьте указать запуск hooks.php в package-info.xml (и в секции install, и в секции uninstall):

<install for="2.0 - 2.0.99">
    <require-file name="Class-YourModName.php" destination="$sourcedir">Core file</require-file>
    <code>hooks.php</code>
</install>

<uninstall for="2.0 - 2.0.99">
    <code>hooks.php</code>
    <remove-file name="$sourcedir/Class-YourModName.php">OK</remove-file>
</uninstall>

Конечно, можно перечислить все используемые вами хуки в hooks.php. Но есть и другой вариант — указать некую функцию для запуска через хук integrate_pre_load, а затем уже в этой функции перечислить нужные хуки:

public function hooks()
{
    add_integration_function('НАЗВАНИЕ_ХУКА', 'НАЗВАНИЕ_ФУНКЦИИ_В_ЭТОМ_ЖЕ_ФАЙЛЕ', false, __FILE__);
}

Возможности SMF 2.1

В SMF 2.1 появилась возможность указывать используемые хуки непосредственно в package-info.xml:

<install for="2.1 - 2.1.99, 2.1 RC3">
    <require-file name="Class-YourModName.php" destination="$sourcedir">Core file</require-file>
    <hook hook="integrate_pre_load" function="YourModName::hooks" file="$sourcedir/Class-YourModName.php" />
</install>

<uninstall for="2.1 - 2.1.99, 2.1 RC3">
    <hook hook="integrate_pre_load" function="YourModName::hooks" file="$sourcedir/Class-YourModName.php" reverse="true" />
    <remove-file name="$sourcedir/Class-YourModName.php">OK</remove-file>
</uninstall>

Скачивайте шаблоны, меняйте на свое усмотрение, творите.

Универсальный шаблон Шаблон для SMF 2.1

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