При помощи хуков можно создать
лунапарк с блэк джеком и шлюхами модуль, который абсолютно не будет изменять код файлов smf.
Hooks (англ.) - крючки
Хуки используются в разных движках - drupal, vbulletin, smf, phpbb, ...
Во многих функциях форума есть переменные, которые и приходится изменять модописателям.
При помощи хуков эти самые переменные передаются по ссылке(или принимают новое значение из вызываемого хука) в ваши функции или методы классов в файлах вашего модуля.
Хуки могут не передавать переменные, а просто вызываться, - в таком случае вам следует использовать глобальные переменные или, например, подключать языковые файлы.
Преимущества:Моды пишутся быстрее, аккуратней, в отдельных файлах и не изменяют код форума.
Ссылки:http://wiki.simplemachines.org/smf/Integration_hooks (http://wiki.simplemachines.org/smf/Integration_hooks)
http://www.simplemachines.org/community/index.php?topic=173483.0 (http://www.simplemachines.org/community/index.php?topic=173483.0)
http://www.simplemachines.ru/index.php?topic=12037.0 (http://www.simplemachines.ru/index.php?topic=12037.0)
Пример:(данный хук позволяет подключать собственные страницы)
./index.php
// Allow modifying $actionArray easily.
call_integration_hook('integrate_actions', array(&$actionArray));
Чтобы внести изменения в переменную $actionArray нужно создать функцию в вашем моде и связать её с БД:
Добавляем названия ваших хуков и их расположение в БД форума:
В файле package-info.xml добавляем название файла для установки хуков в базу данных при установке вашего мода:
...
<install for="1.0.1 - 1.0.99">
...
<code>Hooks.php</code>
...
</install>
...
<?php
// Hooks.php
add_integration_function('integrate_pre_include', 'Ваш_файл.php'); // Ваш файл с хуками, будет подключаться автоматически после установки вашего мода
add_integration_function('integrate_actions', 'my_action_hook'); // my_action_hook это ваш хук, который будет вызван хуком форума integrate_actions
- Called from: index.php, just after the creation of the action array
- Purpose: To allow add or remove actions from the action array.
- Accepts: 1 function name.
- Sends: $actionArray, this is the array containing all the actions provided by SMF. The structure of the array is: Code:
'myaction' => array('ActionFile.php', 'action_function'),
где:
- myaction - is the action as it appears in the url (e.g. http://yourforum.tld/forum/index.php?action=myaction)
- ActionFile.php - is the file containing the function that is called when the action is requested
- action_function - is the name of the function that will be executed
Пример для вашей функции:
// Ваш_файл.php
function my_action_hook(&$actionArray)
{
$actionArray += ['адрес_страницы' => ['my_mod.php', 'my_action_function']];
}
Теперь при переходе по адресу http://вашфорум/index.php?action=адрес_страницы будет вызваться my_action_function из my_mod.php, благодаря вызову хука integrate_actions, который вызовет my_action_hook.