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

(Difference between revisions)
Jump to: navigation, search
(дополнение)
Line 1: Line 1:
{{toc | category = Unit Configs | sortkey = 001.001}}
{{toc | category = Unit Configs | sortkey = 001.001}}
-
To use a particular class in <code>K4</code>, it must first be registered. Class registration is a process, the result of which is that <code>K4</code> learns:
+
Для того, чтобы использовать тот или иной класс в <code>K4</code> его необходимо сначала зарегистрировать. Регистрация класса - это процесс, в результате которого <code>K4</code> становиться известно:
-
* The name of the class;
+
* название класса;
-
* The location of the file where the class is written;
+
* где находиться файл, в котором класс описан;
-
* The <code>pseudo</code> that's going to be used when referring to an object of the class.
+
* <code>pseudo</code>, который будет использоваться для обращения к объекту класса.
-
{{InfoBox|'''<code>pseudo</code>''' - a keyword that can be used from any place in <code>K4</code> to get an object of a class that's registered under the <code>pseudo</code>.}}
+
{{InfoBox|'''<code>pseudo</code>''' - это ключевое слово, по которому можно в последствии из любого места в <code>K4</code> получить объект класса, зарегистрированного под этим <code>pseudo</code>.}}
-
 
+
== Получение объекта ==
-
== Getting an Object ==
+
Получить объект можно при помощи метода '''<code>kApplication::recallObject</code>''', например вот так:
-
The '''<code>kApplication::recallObject</code>''' can be used to get an object, for example:
+
<source lang="php">
<source lang="php">
$price =& $this->Application->recallObject('price');
$price =& $this->Application->recallObject('price');
Line 15: Line 14:
</source>
</source>
-
In order for <code>auto-complete</code> to work in [http://www.zend.com/products/zend_studio Zend Studio], it's necessary to put a specially formatted comment after getting an object. The general form of this kind of comment is:
+
Для того, чтобы в [http://www.zend.com/products/zend_studio Zend Studio] работала автоматическая подсказка кода (<code>auto-complete</code>) нужно после получения объекта написать специальным образом оформленный комментарий. В общем случае формат этого комментария таков:
<source lang="php">
<source lang="php">
/* @var $variable_name ClassName */
/* @var $variable_name ClassName */
</source>
</source>
-
== Registering a Class ==
+
== Регистрация класса ==
-
In a [[K4:Unit Configs|configuration file]] there are a number of options with similar formats for the purpose of registering classes in <code>K4</code>:
+
В [[K4:Unit Configs|конфигурационном файле]] есть ряд опций со схожим форматом, служащих для регистрации классов в <code>K4</code>:
{| class="prettytable"
{| class="prettytable"
-
! Option Name || Corresponding <code>pseudo</code>
+
! название опции || используемый <code>pseudo</code>
|-
|-
| {{ConfigProperty|ItemClass|array}} || <code><prefix></code>
| {{ConfigProperty|ItemClass|array}} || <code><prefix></code>
Line 37: Line 36:
|}
|}
-
In the above table, "<code><prefix></code>" is the value of the [[K4:Unit Configs#Prefix|Prefix]] option in a configuration file. The value of each above option (except '''<code>RegisterClasses</code>''') is an array of the following format:
+
В приведённой выше таблице "<code><prefix></code>" это значение опции [[K4:Unit Configs#Prefix|Prefix]] в конфигурационном файле. Значение каждой из выше написанных опций (кроме '''<code>RegisterClasses</code>''') является массивом следующего вида:
<source lang="php">
<source lang="php">
Array (
Array (
Line 47: Line 46:
</source>
</source>
-
All of the keys in this array, except '''<code>require_classes</code>''', are required. However, the value of some of the keys can be empty.
+
Все ключи в данном массиве, кроме '''<code>require_classes</code>''', обязательные. Правда значения некоторых из ключей могут быть пустыми.
{| class="prettytable"
{| class="prettytable"
-
! Name|| Description
+
! название || описание
|-
|-
-
| {{ConfigProperty|class|string}} || Name of the class being registered (new of new class or system class).
+
| {{ConfigProperty|class|string}} || Название регистрируемого класса (название нового или системного класса).
|-
|-
-
| {{ConfigProperty|file|string}} || Name of the file where the class is written (one file per class); if empty, then it's assumed that a system class is being used.
+
| {{ConfigProperty|file|string}} || Название файла, содержащего описание класса (по одному файлу на один класс); если указано пустое значение то подразумевается, что используется системный класс.
|-
|-
-
| {{ConfigProperty|build_event|string}} || Event from [[EventHandler:About|event handlers]], used for initializing copies of the class being registered (i.e. an object). In other words, this is a class constructor, which is located in the [[EventHandler:About|event handler]].
+
| {{ConfigProperty|build_event|string}} || Событие из [[EventHandler:About|обработчике событий]], использующееся для инициализации экземпляров регистрируемого класса (т.е. объекта). Другими словами это конструктор класса, который находиться в [[EventHandler:About|обработчике событий]].
|-
|-
-
| {{ConfigProperty|require_classes|mixed}} || Name of the class(es), which must be loaded before using this class. If one class is indicated, then the value of the key can be a String. If several classes are indicated, then the value of the key must be an Array.  
+
| {{ConfigProperty|require_classes|mixed}} || Название класса(-ов), описание которого должно быть загружено перед использованием данного класса. Если указывается один класс, то значение данного ключа может быть строкой. Если указывается несколько классов, то значение данного ключа будет массивом.
|}
|}
-
{{TipBox|The value of '''all''' keys (except  [[#build_event|build_event]]) of this array must follow [[K4:Назначение имён|naming conventions]] rules]].}}
+
{{TipBox|Значение '''всех''' ключей (кроме [[#build_event|build_event]]) этого массива должно подчиняться правилу [[K4:Назначение имён|назначения имён]].}}
-
== Substituting Classes ==
+
== Подмена классов ==
-
There are cases when one or more classes used in the system must be substituted. To do this, the <code>RegisterClasses</code> key is used. When registering or substituting a class, in the <code>RegisterClasses</code> key it's required to indicate an additional <code>pseudo</code> key. In this case it must be set because it's not known automatically (like in all of the previously described situations).
+
Бывают случаи, когда требуется заменить один или более используемых в системе классов. Для нужно использовать ключ <code>RegisterClasses</code>. При регистрации или подмене класса в ключе <code>RegisterClasses</code> требуется указывать дополнительный ключ <code>pseudo</code>. В данном случае его нужно указывать, т.к. он не может быть автоматически угадан (как во всех ранее описанных случаях).
<source lang="php">
<source lang="php">
'RegisterClasses' => Array (
'RegisterClasses' => Array (
-
Array ('pseudo' => 'u_TagProcessor', 'class' => 'EUserTagProcessor', 'file' => 'e_user_tp.php'), // substitute a user tag processor
+
Array ('pseudo' => 'u_TagProcessor', 'class' => 'EUserTagProcessor', 'file' => 'e_user_tp.php'), // подменить обработчик тэгов пользователей
-
Array ('pseudo' => 'PermissionsHelper', 'class' => 'ЕPermissionsHelper', 'file' => 'e_permission_helper.php'), // substitute a class helper
+
Array ('pseudo' => 'PermissionsHelper', 'class' => 'ЕPermissionsHelper', 'file' => 'e_permission_helper.php'), // подменить класс помошника
)
)
</source>
</source>
-
* When substituting a class the "<code>pseudo</code>" must be set with which the original (i.e. the one being substituted) class was registered.
+
* При подмене класса нужно указывать тот "<code>pseudo</code>", с которым оригинальный (т.е. подменяемый) класс был изначально зарегистрирован. Этот "<code>pseudo</code>" можно узнать, если найти в проекте тот PHP-файл, в котором был изначально зарегистрирован требуемый класс.
-
* Registration of the substitute class must be done after registration of the original class. This requirement is automatically fulfilled if class substitution is done in the "<code>custom/units/sections_config.php</code>" file.
+
* Регистрация подменённого класса должна происходить после регистрации оригинального класса. Это условие будет автоматически выполняться, если подмена класса описана в файле "<code>custom/units/sections/sections_config.php</code>".
-
== Standard Classes ==
+
== Стандартные классы ==
-
The following standard classes are available:
+
Доступны следующие стандартные классы:
-
* '''<code>kDBItem</code>''' - class for working with '''one''' database record;
+
* '''<code>kDBItem</code>''' - класс, для работы с '''одной''' записью в базе;
-
* '''<code>kDBList</code>''' - class for displaying the contents of a database table (filters, per-page, etc.);
+
* '''<code>kDBList</code>''' - класс для отображения содержания таблицы из базы (фильтрация, per-page и т.п.);
-
* '''<code>kDBEventHandler</code>''' - class for processing standard events from lists and edit forms;
+
* '''<code>kDBEventHandler</code>''' - класс для обработки стандартных событий из списков и форм редактирования;
-
* '''<code>kDBTagProcessor</code>''' - class for processing standard tags used for displaying information;
+
* '''<code>kDBTagProcessor</code>''' - класс для обработки стандартных тэгов, использующихся для вывода информации;
-
* '''<code>kEventHandler</code>''' - root class for all event handlers (use only with the goal of reducing memory usage);
+
* '''<code>kEventHandler</code>''' - базовый класс для всех обработчиков событий (использовать только в целях экономии оперативной памяти);
-
The value of the [[#file|file]] key should be empty for standard classes.
+
Для стандартных классов значение ключа [[#file|file]] должно быть пустым.

Revision as of 16:00, 4 November 2009

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 должно быть пустым.