API UMI.CMS предоставляет ООП-классы для работы с базой данных, с файлами, другими модулями, импортом/экспортом XML.
Все сущности, с которыми мы взаимодействуем в UMI.CMS, представляют собой объекты. Несколько особняком стоят страницы в дереве сайта. Они, как двуликий Янус, являют собой и объекты, и элементы иерархии. Все объекты создаются по предопределенным шаблонам - типам данных.
Тип данных
Это шаблон, по которому создаются все объекты в UMI.CMS. Тип данных описывает, какие свойства будут доступны у объекта, созданного по этому типу данных. Типы данных могут наследоваться, в этом случае дочерний тип данных наследует все поля родительского. Через API непосредственно управляется классами umiObjectTypesCollection и umiObjectType.
Все существующие в данный момент типы данных можно увидеть в дереве иерархии в модуле "Шаблоны данных".
Набор характеристик типа данных описывается сущностями, которые называются "Поле"
Поле
Это сущность, которую использует тип данных для описания набора свойств своих объектов и предназначены для хранения информации об объекте. Сам по себе тип данных и поля, находящиеся в его составе, не содержат значений свойств, которые существуют у объектов, а только описывает их поведение. Управление полями реализовано в модуле "шаблоны данных". В UMI.API управление полями реализовано через классы umiField, umiFieldsGroup и umiFieldsCollection.
Поля наследуются по принципу жесткой ссылки — изменение атрибутов поля у подтипа, повлечет изменение атрибутов поля родительского типа. Однако мы можем удалить поле, или добавить новое поле у подтипа без изменений в родительском типе.
Группа полей — это способ объединять поля по какому-либо принципу.
Группы полей наследуются по принципу мягкой ссылки — изменения в группах для подтипов не повлечет изменений в родительском типе.
Объект
Объект - набор данных, созданный по типу данных. Каждый объект неразрывно связан со своим типом данных, который управляет набором свойств этого объекта. Если у объекта нету свойств, то из аттрибутов у него есть только id объекта, название и id пользователя, которые создал этот объект. Все созданные поля в типе данных, которому принадлежит этот объект тут же превращяются в свойства этого объекта. Сам объект никак не привязан к структуре сайта. Объекты в системе являются пользователями, заказами в магазине и т.п.. Реализуется через классы umiObject и umiObjectCollection.
Свойство
Это свойство объекта (соответсвует полю в типе данных), которое содержит некое значение. Значение, которое содержит свойство, определяется полем, которому оно принадлежит. Работа со свойствами реализуется через класс umiObjectProperty. Но напрямую с ним работать бессмыслено, потому что свойство всегда привязано к какому-либо объекту. Доступ к свойствам обеспечивают методы getValue()/setValue() классов umiObject и umiHierarchyElement.
Элемент
Это страница в дереве сайта. Любая страница, будь то страница контента, новость, либо объект каталога реализуется через эту сущность. Элемент включает в себя аттрибуты:
- Id элемента
- Псевдостатический адрес
- Id родительского элемента
- Id шаблона дизайна
- Id домена, в котором расположен элемент
- Id языка, к которому принадлежит элемент
- Id типа в иерархии
- Ссылку на объект, который является источником данных этого элемента
Как мы видим, элемент сам по себе содержит только информацию о своем положении в дереве сайта, но при этом ссылается на объект. Это позволяет работать со страницами сайта как с обычными объектами, обращаться к объекту напрямую, делать виртуальные копии страниц и самое главное - управлять набором полей любой страницы на сайте через модуль шаблонов данных.
Тип в иерархии
Тип в иерархии описывает назначение какой-либо страницы в дереве сайта. При открытии какой-либо страницы на сайте, система определит текущую страницу и в зависимости от типа этой страницы в иерархии вызовет необходимый метод-обработчик нужного нам класса.