In-Portal Developers Guide

This is a wiki-based Developers Guide for In-Portal Open Source CMS. The purpose of this guide is to provide advanced users, web developers and programmers with documentation on how to expand, customize and improve the functionality and the code the In-Portal software. Please consider contributing to our documentation writing effort.

K4:Регистрация классов

From In-Portal Developers Guide

Revision as of 02:33, 28 November 2010 by Dmitry (Talk | contribs)
(diff) ←Older revision | Current revision (diff) | Newer revision→ (diff)
Jump to: navigation, search
Unit Configs Unit Configs
Статьи в этой категории

Для того, чтобы использовать тот или иной класс в K4 его необходимо сначала зарегистрировать. Регистрация класса - это процесс, в результате которого K4 становиться известно:

  • название класса;
  • где находиться файл, в котором класс описан;
  • pseudo, который будет использоваться для обращения к объекту класса.
Image:Infobox Icon.gif pseudo - это ключевое слово, по которому можно в последствии из любого места в K4 получить объект класса, зарегистрированного под этим pseudo.

Contents

Получение объекта

Получить объект можно при помощи метода kApplication::recallObject, например вот так:

$price =& $this->Application->recallObject('price');
/* @var $price kDBItem */

Для того, чтобы в Zend Studio работала автоматическая подсказка кода (auto-complete) нужно после получения объекта написать специальным образом оформленный комментарий. В общем случае формат этого комментария таков:

/* @var $variable_name ClassName */

Регистрация класса

В конфигурационном файле есть ряд опций со схожим форматом, служащих для регистрации классов в K4:

название опции используемый pseudo
ItemClass (array) <prefix>
ListClass (array) <prefix>_List
EventHandlerClass (array) <prefix>_EventHandler
TagProcessorClass (array) <prefix>_TagProcessor
RegisterClasses (array) Задаётся в ручную в ключе "pseudo".

В приведённой выше таблице "<prefix>" это значение опции Prefix в конфигурационном файле. Значение каждой из выше написанных опций (кроме RegisterClasses) является массивом следующего вида:

Array (
	'class' => 'ClassName',
	'file' => 'FileName',
	'build_event' => 'BuildEventName',
	'require_classes' => 'RequiredClassName'
)

Все ключи в данном массиве, кроме require_classes, обязательные. Правда значения некоторых из ключей могут быть пустыми.

название описание
class (string) Название регистрируемого класса (название нового или системного класса).
file (string) Название файла, содержащего описание класса (по одному файлу на один класс); если указано пустое значение то подразумевается, что используется системный класс.
build_event (string) Событие из обработчике событий, использующееся для инициализации экземпляров регистрируемого класса (т.е. объекта). Другими словами это конструктор класса, который находиться в обработчике событий.
require_classes (mixed) Название класса(-ов), описание которого должно быть загружено перед использованием данного класса. Если указывается один класс, то значение данного ключа может быть строкой. Если указывается несколько классов, то значение данного ключа будет массивом.
Image:Tipbox Icon.gif Значение всех ключей (кроме build_event) этого массива должно подчиняться правилу назначения имён.

Подмена классов

Бывают случаи, когда требуется заменить один или более используемых в системе классов. Для нужно использовать ключ RegisterClasses. При регистрации или подмене класса в ключе RegisterClasses требуется указывать дополнительный ключ pseudo. В данном случае его нужно указывать, т.к. он не может быть автоматически угадан (как во всех ранее описанных случаях).

'RegisterClasses' => Array (
	Array ('pseudo' => 'u_TagProcessor', 'class' => 'EUserTagProcessor', 'file' => 'e_user_tp.php'), // подменить обработчик тэгов пользователей
	Array ('pseudo' => 'PermissionsHelper', 'class' => 'ЕPermissionsHelper', 'file' => 'e_permission_helper.php'), // подменить класс помошника
)
  • При подмене класса нужно указывать тот "pseudo", с которым оригинальный (т.е. подменяемый) класс был изначально зарегистрирован. Этот "pseudo" можно узнать, если найти в проекте тот PHP-файл, в котором был изначально зарегистрирован требуемый класс.
  • Регистрация подменённого класса должна происходить после регистрации оригинального класса. Это условие будет автоматически выполняться, если подмена класса описана в файле "custom/units/sections/sections_config.php".

Стандартные классы

Доступны следующие стандартные классы:

  • kDBItem - класс, для работы с одной записью в базе;
  • kDBList - класс для отображения содержания таблицы из базы (фильтрация, per-page и т.п.);
  • kDBEventHandler - класс для обработки стандартных событий из списков и форм редактирования;
  • kDBTagProcessor - класс для обработки стандартных тэгов, использующихся для вывода информации;
  • kEventHandler - базовый класс для всех обработчиков событий (использовать только в целях экономии оперативной памяти);

Для стандартных классов значение ключа file должно быть пустым.