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

в 19:28, , рубрики: cms, php, web-разработка, Веб-разработка, метки: , ,

Про систему 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 архив.
Написание плагина для Kasseler CMS [часть 1]

Надеюсь на то, что пост будет полезен, и я смогу описать оставшихся два вида дополнений.

Дальше интереснее…;)

Автор: bad_guy

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js