Хуки в Cotonti. Основы.
В Cotonti хуки используются для динамического вмешательства в процесс выполнения кода
Расскажем о хуках в Cotonti, как можно использовать хуки для расширения функционала системы.
Основы хуков — что это такое и как они работают, используя пример с переменными $foo, $bar, $baz. Это позволяет понять, как хуки могут изменять поведение кода в реальном времени.
Типы хуков — описаны как системные, так и специфичные для различных действий, например, для вывода страницы, обработки AJAX-запросов, административных страниц и т.д. Это дает четкое представление о том, когда и как использовать конкретный хук в зависимости от контекста.
Правила именования хуков — например, как правильно назвать хуки в соответствии с их назначением, чтобы было легко понять, к какому модулю или части системы они принадлежат.
Программирование обработчиков — как создавать обработчики для хуков, например, в файле с именем, соответствующим хукe, и как настроить параметры для их правильной работы.
Расширение собственных модулей — пример использования функции cot_getextplugins для добавления точек расширения в ваши собственные модули.
1. Введение в хуки Cotonti
Что такое хук?
Хук (от англ. hook) — это специальная точка расширения в программе, которая позволяет вставить сторонний код для изменения логики работы основной программы. В Cotonti хуки используются для динамического вмешательства в процесс выполнения кода. Например, при вызове хука система подключает PHP файл, зарегистрированный как обработчик этого события.
Пример использования хука:
$foo = 'Повелитель добра'; $bar = 'уничтожил'; $baz = 'все зло на планете!'; // ... Код до хука ... // Обработчик хука изменяет переменные $foo .= ' и его могущественные помощники'; $bar = 'уничтожили почти '; echo "$foo $bar $baz"; // Выведет: Повелитель добра и его могущественные помощники уничтожили почти все зло на планете!
2. Основные хуки Cotonti
Как выбрать хук?
Перед написанием кода расширения важно определить, какой именно функционал системы нужно изменить, и выбрать соответствующий хук. Хуки бывают разных типов в зависимости от ситуации, и их точка вызова зависит от того, что происходит в процессе работы скрипта.
Основные системные хуки:
input — первая точка расширения, используется до полной инициализации системы. Можно менять начальные параметры.
rc — используется для загрузки дополнительных ресурсов, данных или переопределения переменных.
global — выполняется при каждом запросе, сразу после инициализации системы.
header.first, header.main, header.tags — используются для манипуляции с заголовками страницы.
footer.first, footer.main, footer.tags — аналогично для изменения подвала страницы.
output — вызывается перед финальной обработкой страницы и выводом результата.
Специфичные хуки для различных действий:
popup — при выводе всплывающих окон.
standalone — для страниц плагинов.
module — для модулей.
ajax — при обработке AJAX-запросов.
tools, admin — для административных панелей.
Системные хуки внутри функций:
die.message — внутри cot_die_message().
structure — внутри cot_load_structure().
parser.last — внутри cot_parse().
3. Правила именования хуков
Имена хуков часто состоят из нескольких частей, разделённых точками. Это помогает понять, к какой части системы или модуля относится хук.
Пример структуры имени хука:
users.register — хук для регистрации пользователя в модуле "users".
page.edit.update.done — хук, срабатывающий после обновления страницы.
Циклические хуки (например, forums.topics.sections.loop) повторяются несколько раз, часто для каждого результата SQL-запроса.
4. Программирование обработчиков хуков
Как создать обработчик хука?
Обработчик хука — это PHP файл, который реализует логику изменений. Обычно его имя соответствует имени хука.
Шаблон файла обработчика хука:
<?php
/* ====================
[BEGIN_COT_EXT]
Hooks=page.tags
Tags=page.tpl:{PAGE_MYEXT_TAG1},{PAGE_MYEXT_TAG2}
Order=10
[END_COT_EXT]
==================== */
defined('COT_CODE') or die('Wrong URL');
// Код обработчика
Hooks — указывает хук, на который будет реагировать обработчик.
Tags — указывает на дополнительные теги, которые могут быть использованы в шаблоне.
Order — порядок выполнения обработчиков, если их несколько.
Порядок выполнения: Обработчики с меньшими номерами Order выполняются первыми. Если параметр Order не указан, то используется значение по умолчанию — 10.
5. Использование глобальных переменных
Глобальные переменные в Cotonti могут быть доступны как через глобальный массив, так и через специальный класс Cot.
Пример:
$cfg = Cot::$cfg; // доступ к конфигурации $usr = Cot::$usr; // доступ к данным пользователя
Это упрощает доступ к важным данным, таким как конфигурация, пользовательские данные и базы данных.
6. Расширение собственных модулей с хуками
Как добавлять хуки в свои модули?
Подключение обработчиков хуков:
Для добавления точек расширения в ваш модуль, используйте функцию cot_getextplugins().
Пример:
/* === Hook === */
foreach (cot_getextplugins('myext.hook.name') as $pl) {
include $pl;
}
/* ============ */
Циклические хуки: Для хуков, которые вызываются несколько раз в цикле, рекомендуется вызывать cot_getextplugins() только один раз до цикла для повышения производительности.
Пример:
/* === Хук - часть1: установка === */
$extp = cot_getextplugins('myext.some.loop');
/* ============ */
foreach ($items as $item) {
// Код обработки
/* === Хук - часть2: вызов обработчика === */
foreach ($extp as $pl) {
include $pl;
}
/* ============ */
// Дополнительный код
}
7. Списки вызова хуков
В зависимости от URL страницы и запрашиваемого ресурса, хук может быть вызван в разных последовательностях. Пример:
Главная страница: input, rc, global, header.first, footer.first, output
Страница новостей: input, rc, global, page.tags, footer.last, output
Админпанель модуля: input, rc, global, admin.main, footer.last, output
8. Заключение
Хуки в Cotonti — это мощный инструмент для изменения и расширения функционала системы без необходимости вносить изменения в основной код. Правильное использование хуков и их обработчиков позволяет легко создавать гибкие расширения и плагины для Cotonti.
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 26.01.2025 11:19
- Последнее обновление: 26.01.2025 11:19