K4:Регистрация классов
From In-Portal Developers Guide
(дополнение) |
|||
Line 1: | Line 1: | ||
{{toc | category = Unit Configs | sortkey = 001.001}} | {{toc | category = Unit Configs | sortkey = 001.001}} | ||
- | + | Для того, чтобы использовать тот или иной класс в <code>K4</code> его необходимо сначала зарегистрировать. Регистрация класса - это процесс, в результате которого <code>K4</code> становиться известно: | |
- | * | + | * название класса; |
- | * | + | * где находиться файл, в котором класс описан; |
- | * | + | * <code>pseudo</code>, который будет использоваться для обращения к объекту класса. |
- | {{InfoBox|'''<code>pseudo</code>''' - | + | {{InfoBox|'''<code>pseudo</code>''' - это ключевое слово, по которому можно в последствии из любого места в <code>K4</code> получить объект класса, зарегистрированного под этим <code>pseudo</code>.}} |
- | + | == Получение объекта == | |
- | == | + | Получить объект можно при помощи метода '''<code>kApplication::recallObject</code>''', например вот так: |
- | + | ||
<source lang="php"> | <source lang="php"> | ||
$price =& $this->Application->recallObject('price'); | $price =& $this->Application->recallObject('price'); | ||
Line 15: | Line 14: | ||
</source> | </source> | ||
- | + | Для того, чтобы в [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> | ||
- | == | + | == Регистрация класса == |
- | + | В [[K4:Unit Configs|конфигурационном файле]] есть ряд опций со схожим форматом, служащих для регистрации классов в <code>K4</code>: | |
{| class="prettytable" | {| class="prettytable" | ||
- | ! | + | ! название опции || используемый <code>pseudo</code> |
|- | |- | ||
| {{ConfigProperty|ItemClass|array}} || <code><prefix></code> | | {{ConfigProperty|ItemClass|array}} || <code><prefix></code> | ||
Line 37: | Line 36: | ||
|} | |} | ||
- | + | В приведённой выше таблице "<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> | ||
- | + | Все ключи в данном массиве, кроме '''<code>require_classes</code>''', обязательные. Правда значения некоторых из ключей могут быть пустыми. | |
{| class="prettytable" | {| class="prettytable" | ||
- | ! | + | ! название || описание |
|- | |- | ||
- | | {{ConfigProperty|class|string}} || | + | | {{ConfigProperty|class|string}} || Название регистрируемого класса (название нового или системного класса). |
|- | |- | ||
- | | {{ConfigProperty|file|string}} || | + | | {{ConfigProperty|file|string}} || Название файла, содержащего описание класса (по одному файлу на один класс); если указано пустое значение то подразумевается, что используется системный класс. |
|- | |- | ||
- | | {{ConfigProperty|build_event|string}} || | + | | {{ConfigProperty|build_event|string}} || Событие из [[EventHandler:About|обработчике событий]], использующееся для инициализации экземпляров регистрируемого класса (т.е. объекта). Другими словами это конструктор класса, который находиться в [[EventHandler:About|обработчике событий]]. |
|- | |- | ||
- | | {{ConfigProperty|require_classes|mixed}} || | + | | {{ConfigProperty|require_classes|mixed}} || Название класса(-ов), описание которого должно быть загружено перед использованием данного класса. Если указывается один класс, то значение данного ключа может быть строкой. Если указывается несколько классов, то значение данного ключа будет массивом. |
|} | |} | ||
- | {{TipBox| | + | {{TipBox|Значение '''всех''' ключей (кроме [[#build_event|build_event]]) этого массива должно подчиняться правилу [[K4:Назначение имён|назначения имён]].}} |
- | == | + | == Подмена классов == |
- | + | Бывают случаи, когда требуется заменить один или более используемых в системе классов. Для нужно использовать ключ <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'), // | + | Array ('pseudo' => 'u_TagProcessor', 'class' => 'EUserTagProcessor', 'file' => 'e_user_tp.php'), // подменить обработчик тэгов пользователей |
- | Array ('pseudo' => 'PermissionsHelper', 'class' => 'ЕPermissionsHelper', 'file' => 'e_permission_helper.php'), // | + | Array ('pseudo' => 'PermissionsHelper', 'class' => 'ЕPermissionsHelper', 'file' => 'e_permission_helper.php'), // подменить класс помошника |
) | ) | ||
</source> | </source> | ||
- | * | + | * При подмене класса нужно указывать тот "<code>pseudo</code>", с которым оригинальный (т.е. подменяемый) класс был изначально зарегистрирован. Этот "<code>pseudo</code>" можно узнать, если найти в проекте тот PHP-файл, в котором был изначально зарегистрирован требуемый класс. |
- | * | + | * Регистрация подменённого класса должна происходить после регистрации оригинального класса. Это условие будет автоматически выполняться, если подмена класса описана в файле "<code>custom/units/sections/sections_config.php</code>". |
- | == | + | == Стандартные классы == |
- | + | Доступны следующие стандартные классы: | |
- | * '''<code>kDBItem</code>''' - | + | * '''<code>kDBItem</code>''' - класс, для работы с '''одной''' записью в базе; |
- | * '''<code>kDBList</code>''' - | + | * '''<code>kDBList</code>''' - класс для отображения содержания таблицы из базы (фильтрация, per-page и т.п.); |
- | * '''<code>kDBEventHandler</code>''' - | + | * '''<code>kDBEventHandler</code>''' - класс для обработки стандартных событий из списков и форм редактирования; |
- | * '''<code>kDBTagProcessor</code>''' - | + | * '''<code>kDBTagProcessor</code>''' - класс для обработки стандартных тэгов, использующихся для вывода информации; |
- | * '''<code>kEventHandler</code>''' - | + | * '''<code>kEventHandler</code>''' - базовый класс для всех обработчиков событий (использовать только в целях экономии оперативной памяти); |
- | + | Для стандартных классов значение ключа [[#file|file]] должно быть пустым. |
Revision as of 16:00, 4 November 2009
| ||
---|---|---|
Статьи в этой категории | ||
Для того, чтобы использовать тот или иной класс в K4
его необходимо сначала зарегистрировать. Регистрация класса - это процесс, в результате которого K4
становиться известно:
- название класса;
- где находиться файл, в котором класс описан;
-
pseudo
, который будет использоваться для обращения к объекту класса.
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) | Название класса(-ов), описание которого должно быть загружено перед использованием данного класса. Если указывается один класс, то значение данного ключа может быть строкой. Если указывается несколько классов, то значение данного ключа будет массивом. |
Значение всех ключей (кроме 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 должно быть пустым.