Про систему Kasseler CMS мало кто слышал, но все же она существует. Документации по системе очень мало, а в документации по плагинам рассмотрены самые простые примеры, которые не дают возможности пользователю увидеть всей силы так называемых хуков. В серии постов хочу продемонстрировать примеры написания плагинов для данной системы.
Введение
В системе реализовано три вида дополнений:
- Хуки – однофайловые плагины, которые не имеют управления
- Файловые хуки – подмена системного файла при подключении
- Плагины – полноценные плагины с инсталляцией и деинсталляцией, а также с возможностью написания конфигурации и тд.
Основной набор функций работы с хуками
- Функция 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 архив.
Надеюсь на то, что пост будет полезен, и я смогу описать оставшихся два вида дополнений.
Дальше интереснее…;)
Автор: bad_guy