K4:Purpose and Usage of Units
From In-Portal Developers Guide
|  (дополнение) |  (Translation) | ||
| Line 2: | Line 2: | ||
| <!-- Пишите ПОСЛЕ этой строки, пожалуйста. Ничего не стирать! --> | <!-- Пишите ПОСЛЕ этой строки, пожалуйста. Ничего не стирать! --> | ||
| - | ==  | + | == What are Units == | 
| Компоненты - это основная единица хранения информации в <code>K4</code>. Компонент представляет собой [[K4:Конфигурационные_файлы|набор полей для хранения информации и правил их обработки]], набор [[K4:Bazovye_svedenija_o_tjegah_i_shablonah|тэгов]] специально предназначенных именно для этого компонента, и так же специального набора [[Kategorija:Opisanie_sobytij|событий]]. | Компоненты - это основная единица хранения информации в <code>K4</code>. Компонент представляет собой [[K4:Конфигурационные_файлы|набор полей для хранения информации и правил их обработки]], набор [[K4:Bazovye_svedenija_o_tjegah_i_shablonah|тэгов]] специально предназначенных именно для этого компонента, и так же специального набора [[Kategorija:Opisanie_sobytij|событий]]. | ||
| + | |||
| + | Unit - this is a single component for storing the information in <code>In-Portal</code>. A unit  | ||
| + | |||
| Каждый компонент может содержать теоретически неограниченное кол-во полей. Поля - это своего рода ячейки, в которых хранится информация об отдельных свойствах компонента. Например, если бы задачей была реализация функциональности гостевой книги, это могло выглядеть так: | Каждый компонент может содержать теоретически неограниченное кол-во полей. Поля - это своего рода ячейки, в которых хранится информация об отдельных свойствах компонента. Например, если бы задачей была реализация функциональности гостевой книги, это могло выглядеть так: | ||
| Line 116: | Line 119: | ||
| </source> | </source> | ||
| Дата хранится в виде <code>timestamp</code>, поэтому в базе необходимо поле для хранения целых чисел (длиной 11 символов). Обязательный в этом случае параметр <code>formatter</code>, указывающий каким форматтером будет обрабатываться поле (для даты - <code>kDateFormatter</code>). И ключевое слово #NOW# в качестве значения по-умолчанию, которое будет автоматически заменено на текущую дату при создании компонента. | Дата хранится в виде <code>timestamp</code>, поэтому в базе необходимо поле для хранения целых чисел (длиной 11 символов). Обязательный в этом случае параметр <code>formatter</code>, указывающий каким форматтером будет обрабатываться поле (для даты - <code>kDateFormatter</code>). И ключевое слово #NOW# в качестве значения по-умолчанию, которое будет автоматически заменено на текущую дату при создании компонента. | ||
| + | |||
| + | [[en:{{FULLPAGENAME}}]] | ||
| + | [[ru:K4:Применение Компонентов]] | ||
| + | |||
| + | [http://guide.in-portal.org/rus/index.php?title=K4:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%9A%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&oldid=1034] | ||
Revision as of 00:03, 27 November 2010
| This article is not finished yet! You see this message because current Article is finished yet or contains unverified information. How to write an Article. | 
| 
 | ||
|---|---|---|
| Статьи в этой категории | ||
| 
 | 
| Contents | 
What are Units
Компоненты - это основная единица хранения информации в K4. Компонент представляет собой набор полей для хранения информации и правил их обработки, набор тэгов специально предназначенных именно для этого компонента, и так же специального набора событий.
Unit - this is a single component for storing the information in In-Portal. A unit 
Каждый компонент может содержать теоретически неограниченное кол-во полей. Поля - это своего рода ячейки, в которых хранится информация об отдельных свойствах компонента. Например, если бы задачей была реализация функциональности гостевой книги, это могло выглядеть так:
компонент "сообщение" с полями "автор", "дата размещения комментария", "сообщение".
Что можно делать с компонентами
Компоненты могут быть использованы для хранения, обработки и отображения информации.
Класс, содержащий специализированные тэги компонента, является наследником базового класса kDBTagProcessor, который уже содержит большинство необходимых тэгов для работы с компонентами. Однако, иногда может понадобиться добавить новый или изменить поведение какого-либо тэга для отдельного компонента - тогда изменения производятся в классе тэгов этого компонента. Таким образом, изменения не затронут основной класс и не повлияют на работу остальных существующих компонентов.
Описание работы с одним компонентом
Вывод данных компонента на шаблоне:
<inp2:sample_Field name="Title" />В этом примере выводится содержимое поля "Title". Следует отметить, что данный код выполнится успешно только в том случае, если на странице загружен объект компонента "sample" или передан идентификатор, для его автоматической загрузки.
Автозагрузка - это автоматическая загрузка компонента по переданному идентификатору. Например, если на страницу методом POST или GET была передана переменная "sample_id", то предыдущий пример выполнится успешно. Префикс "Авто" обозначает именно то, что объектом можно пользоваться без каких-либо  подготовительных действий.
Создание экземпляра компонента путём вызова события "OnCreate".
Необходимо учесть, что создание компонента по-умолчанию запрещено для всех пользователей фронт-части. Чтобы пользователь не получал ошибку при попытке создать какой-нибудь компонент, в обработчике событий данного компонента необходимо произвести следующие манипуляции:
function mapPermissions() { parent::mapPermissions(); $permissions = Array( 'OnCreate' => Array('self' => true), ); $this->permMapping = array_merge($this->permMapping, $permissions); }
Т.е. добавить событие "OnCreate" этого компонента в список публично доступных.
При отображении полей компонента на фронт-части, в список публично доступных так же необходимо добавить событие "OnItemBuild".
Описание работы со списком
Для отображения списка компонентов применяется тэг PrintList2. Пример:
<inp2:sample_PrintList per_page="-1" render_as="block_name" columns="3" />Приведённый выше код распечатает все компоненты "sample" внутри таблицы с тремя колонками. Каждая новая строка будет представлена результатом обработки блока "block_name".
Опция конфига ListSortings позволяет управлять последовательностью, в которой будут выводиться списки. Необходимо указать Special, поля и правила сортировки. Пример:
'ListSortings' => Array( '' => Array( 'ForcedSorting' => Array('Priority' => 'desc'), 'Sorting' => Array('OrderDate' => 'desc'), ) ),
Параметр ForcedSorting устанавливает принудительную сортировку.
Параметр конфига TitlePresets управляет различными заголовками в административной части сайта:
'TitlePresets' => Array( 'default' => Array( 'new_status_labels' => Array( 'order' => '!la_title_AddingOrder!' ), 'edit_status_labels' => Array( 'order' => '!la_title_DetailsOfOrder!' ), 'new_titlefield' => Array( 'order' => '!la_title_NewOrder!' ), ), 'order_list'=>Array( 'prefixes' => Array('order_List'), 'format' => "!la_title_purchases! (#order_recordcount#)", ), 'order_edit'=>Array( 'prefixes' => Array('order'), 'format' => "#order_status# #order_titlefield# - !la_title_General!", ), ),
#order_recordcount# - такая строка автоматически заменится на количество компонентов order (общее или количество отфильтрованных, если на гриде применены фильтры).
Гриды
Грид - это список компонентов, выводящийся в административной части сайта. Грид предоставляет полную свободу действий над компонентами: просмотр как деталей отдельного компонента, так и сортированного списка всех компонентов, а так же поиска по любому полю.
Редактирование
Редактирование компонента может осуществляться как с пользовательской части сайта, так и из административной. Разница лишь в том, что административная часть уже содержит все необходимые формы и требует только заполнения конфиг файла для компонента.
Чтобы редактировать компонент с пользовательской части сайта, нужно составить форму с полями, которые необходимо редактировать, а так же передать в скрытом поле название события, которое обработает изменения. Пример:
<form id="join_form" method="post" action="<inp2:m_FormAction m_cat_id="0" />" enctype="multipart/form-data">
</form>Если форма содержит поля для загрузки файлов - обязательно нужно указать параметр enctype="multipart/form-data".
Основные типы полей
В полях компонентов можно хранить информацию самых различных типов. От строковых данных до изображений (фактически, всё же, изображения хранятся в специально отведённом месте, а в поле компонента записана только ссылка на файл изображения). Поля в конфигурации определяются следующим образом:
$config = Array( 'Fields' => Array( 'Title' => Array('type' => 'string', 'not_null' => 1, 'default' => '', 'max_len' => 255) ) )
В примере выше показана общая схема составления конфигурации полей. Ключ конфигурационного массива Fields указывает на то, что начинается декларация полей компонента. Сам массив Fields является ассоциативным и каждый ключ в нём является названием описываемого поля в базе данных (имена полей регистрозависимы и должны совпадать в шаблонах и в конфигурационном файле!). Массив 3-его уровня является описанием поля и перечисляет все его свойства и особенности. Далее в примерах будет приводиться только этот массив.
Текст
Пример определения текстового поля в конфигурационном файле компонента:
Array('type' => 'string', 'not_null' => 1, 'default' => '', 'max_len' => 255)
Таким массивом описывается простое текстовое поле. Обратите внимание на значение max_len, если этот параметр не указан - то в поле можно потенциально записать строку неограниченной длинны (т.е. потенциально она может не поместиться в отведённое для неё место в базе данных).
Дата
Пример определения поля с датой в конфигурационном файле компонента:
Array('type' => 'int', 'formatter' => 'kDateFormatter', 'not_null' => 1, 'default' => '#NOW#')
Дата хранится в виде timestamp, поэтому в базе необходимо поле для хранения целых чисел (длиной 11 символов). Обязательный в этом случае параметр formatter, указывающий каким форматтером будет обрабатываться поле (для даты - kDateFormatter). И ключевое слово #NOW# в качестве значения по-умолчанию, которое будет автоматически заменено на текущую дату при создании компонента.



