Вы наверное заметили, что во всех расширениях, в файле manifest.xml есть хуки, вот такие конструкции:
<hooks>
<hook id="fn_generate_navlinks_end" priority="5"><![CDATA[
// здесь много - много всякой php лапши
]]></hook>
</hooks>
Рассмотрим подробнее.
Несколько важных правил:
Хуки располагаются между открывающим <hooks> и закрывающим </hooks> тегом.
ID хука не должен повторяться id="fn_generate_navlinks_end"
Необязательно:
Вы можете указать приоритет загрузки хуков указав значение в priority="5"
Рекомендации:
Хотя на хуки навешивают огромные куски кода, а многие так и делают, я вам советую подключать файлы в которых находится код превышающий 1 килобайт.
Это полезно тем, что намного проще отслеживать возникшие ошибки, PHP LOG укажет на конкретную строку, а так же не требуется каждый раз обновлять хуки. Правьте код и смотрите результат.
Так как код хуков храниться в БД, то для того, что бы облегчить запросы к БД лучше огромные куски кода размещать в файлах.
Если же в коде выполняются запросы к БД, то лучше вставлять этот код напрямую в сам хук.
Для примера, сравните 2 хука:
ПРИМЕР 1
<hook id="fn_generate_navlinks_end" priority="5"><![CDATA[
require $ext_info['path'].'/hooks/fn_generate_navlinks_end.php';
]]></hook>
В этом случае подключен файл в котором находится огромный кусок кода.
Чтобы облегчить работу с подключаемыми файлами, можно давать им названия в соответствии с ID данного хука. В данном случае имя файла fn_generate_navlinks_end.php.
Все файлы, подключаемые в хуках, для удобства, можно собрать в директорию /hooks/.
ВАЖНО! В начале каждого такого файла необходимо прописывать строку:
<?php
if (!defined('FORUM') ) die();
//Далее исполняемый код
Это не позволит злоумышленникам напрямую обращаться к каким либо файлам.
Ну и конечно не забываем про index.html в корне папки
ПРИМЕР 2
<hook id="vt_qr_get_topic_info"><![CDATA[
$query['SELECT'] .= ', f.cat_id, c.cat_name';
$query['JOINS'][] = array(
'LEFT JOIN' => 'categories AS c',
'ON' => 'c.id=f.cat_id'
);
]]></hook>
Это код добавляет запросы в БД для того, чтобы получить имя категории и ее уникальный ID. Код небольшой и содержащий запрос, поэтому лучше его вставить в сам хук.
ОСОБЕННОСТИ
Когда PHP код вставляете в сам хук символы вызова <?php не нужно.
Но если вы вставляете HTML разметку, то код должен выглядеть так:
<hook id="fn_generate_navlinks_end" priority="5"><![CDATA[
?>
HTML разметка здесь
<?php
]]></hook>
Не оставляйте разметку открытой, хук просто не будет работать.