Введение
В системе реализовано три вида дополнений:
- Хуки – однофайловые плагины, которые не имеют управления
- Файловые хуки – подмена системного файла при подключении
- Плагины – полноценные плагины с инсталляцией и деинсталляцией, а также с возможностью написания конфигурации и тд.
Основной набор функций работы с хуками
- Функция bool hook() – Ловушка хука. Размещается в теле каждой функции для возможности написания хука. Если данной ловушки в теле функции нет, то хукнуть функцию невозможно.
- Функция void hook_register($name, $hook) – Регистрация хуков [$name=название оригинальной функции], [$hook=название функции хука].
- Функция void hook_unregister($name, $hook) – Удаление регистрации хука [$name=название оригинальной функции], [$hook=название функции хука].
- Функция bool hook_check($function) – Проверка наличия хука для указанной функции $function.
Хуки
В данном разделе рассмотрим структуру плагина – хука.
Данный тип плагина размещается в корне каталога ./hooks/ без создания собственной директории и должен соответствовать следующим требованиям:
- Название файла: название_плагина.hook.php
- Структура файла:
<?php /** * ---------------------------------------------------------------------- * @filetype hook * @name Мой плагин * @description Описание * @copyright Habrahabr * @author Habrahabr * @email habrahabr@habrahabr.ru * @link http://habrahabr.ru/ * @updateLink * * @license BSD * @version 1.0 * @create 23.05.2013 * @minVersion 1073 * @maxVersion * * ---------------------------------------------------------------------- */ if(!defined('FUNC_FILE')) die('Access is limited'); //Your code ?>
Где:
@filetype – тип плагина @name – название плагина @description – описание плагина @copyright – копирайт @author – автор или авторы через запятую @email – контактные email @link – страница дополнения @updateLink – страница обновлений @license – вид лицензии @version – версия плагина @create – дата создания @minVersion – минимальная ревизия системы поддержки плагина @maxVersion – максимальная ревизия системы поддержки плагина
Теперь напишем свой хук. Задача следующая: написать дополнение, которое отключает страницу проверки вводимой информации при регистрации пользователя.
В системе Kasseler CMS при регистрации пользователя, а точнее после ввода всей информации (логина, пароля, адреса электронной почты), пользователь переходит на страницу, где видит еще раз введенную информацию. Это иногда вводит в заблуждение пользователей и они прерывают регистрацию, думая что регистрация закончена.
Как мы видим задача очень проста, необходимо просто что-то отключить, поэтому нам не нужно создавать огромный плагин с конфигурацией и управлением, достаточно написать хук одной или нескольких функций.
Последовательность написания хука:
- Создаем файл с названием no_check.hook.php
- Копируем в него указанную выше структуру.
- Изменяем информацию в шапке.
- Пишем код
Для того чтобы понять, что нам нужно изменить в работе системы, открываем файл профиля и находим функцию отвечающую за регистрацию (сохранение) пользователей. Это функция registration.
В этой функции имеется условие: if(isset($_SESSION[‘validate’])),
которое и определяет, нужно ли сохранить пользователя, или же предоставить ему страницу проверки введенных данных. В случае, если переменная будет установлена – страница проверки выводится не будет.
Пишем код:
function registration_no_check(){ //устанавливаем необходимые переменные для обхода страницы подтверждения $_SESSION['validate'] = true; $_POST['create_user'] = true; if(!isset($_POST['timezone'])) $_POST['timezone'] = ''; //повторный вызов оригинала для продолжения выполнения кода registration(); } //регистрируем хук hook_register('registration', 'registration_no_check');
Здесь нужно понимать одно правило, что все хуки функций вызываются до оригинала, а сам оригинал может и не отработать, если в функции-хуке нет обратного вызова. А также необходимо учесть небольшой нюанс – если в функции-хуке нет обратного вызова оригинала, то даже при наличии других функций-хуков. которые зарегистрированных к этой функции, они не отработают, так как выполнение закончится на вашем дополнении.
Собственно ваше дополнение готово, для того чтобы добавить его через админпанель необходимо заархивировать в zip архив.
Надеюсь на то, что пост будет полезен, и я смогу описать оставшихся два вида дополнений.
Дальше интереснее…;)
ссылка на оригинал статьи http://habrahabr.ru/post/180885/
Добавить комментарий