K4:Регистрация классов
From In-Portal Developers Guide
| 
 | ||
|---|---|---|
| Статьи в этой категории | ||
Для того, чтобы использовать тот или иной класс в 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 должно быть пустым.


