Написание плагина для Kasseler CMS [часть 1]

от автора

Про систему Kasseler CMS мало кто слышал, но все же она существует. Документации по системе очень мало, а в документации по плагинам рассмотрены самые простые примеры, которые не дают возможности пользователю увидеть всей силы так называемых хуков. В серии постов хочу продемонстрировать примеры написания плагинов для данной системы.

Введение

В системе реализовано три вида дополнений:

  • Хуки – однофайловые плагины, которые не имеют управления
  • Файловые хуки – подмена системного файла при подключении
  • Плагины – полноценные плагины с инсталляцией и деинсталляцией, а также с возможностью написания конфигурации и тд.

Основной набор функций работы с хуками

  • Функция bool hook() – Ловушка хука. Размещается в теле каждой функции для возможности написания хука. Если данной ловушки в теле функции нет, то хукнуть функцию невозможно.
  • Функция void hook_register($name, $hook) – Регистрация хуков [$name=название оригинальной функции], [$hook=название функции хука].
  • Функция void hook_unregister($name, $hook) – Удаление регистрации хука [$name=название оригинальной функции], [$hook=название функции хука].
  • Функция bool hook_check($function) – Проверка наличия хука для указанной функции $function.

Хуки

В данном разделе рассмотрим структуру плагина – хука.
Данный тип плагина размещается в корне каталога ./hooks/ без создания собственной директории и должен соответствовать следующим требованиям:

  1. Название файла: название_плагина.hook.php
  2. Структура файла:
<?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 при регистрации пользователя, а точнее после ввода всей информации (логина, пароля, адреса электронной почты), пользователь переходит на страницу, где видит еще раз введенную информацию. Это иногда вводит в заблуждение пользователей и они прерывают регистрацию, думая что регистрация закончена.

Как мы видим задача очень проста, необходимо просто что-то отключить, поэтому нам не нужно создавать огромный плагин с конфигурацией и управлением, достаточно написать хук одной или нескольких функций.

Последовательность написания хука:

  1. Создаем файл с названием no_check.hook.php
  2. Копируем в него указанную выше структуру.
  3. Изменяем информацию в шапке.
  4. Пишем код

Для того чтобы понять, что нам нужно изменить в работе системы, открываем файл профиля и находим функцию отвечающую за регистрацию (сохранение) пользователей. Это функция 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *