Схема Архетипа
Архетипы предоставляют прозрачную среду для хранения атрибутов объектов контента. Эта среда состоит из Полей хранимых в контейнерах называемых Схема. Поля — это специализированные классы Python, которые позволяют хранить и осуществлять доступ к данным ассоциированным с объектом.
Поля предоставляют новую функциональность: есть специализированные типы полей для строк, списков строк, целых, чисел с плавающей точкой и т. д., что позволяет манипулировать полями по-разному, в зависимости от хранимого типа данных.
Определения
Давайте определим часто используемые термины:
Поле (Field)— экземпляр класс Field определенного в Схеме
Схема (Schema)— конейнер, который используется для хранения полей
Схемата (Schemata) — именованная группа полей. Одна схема может содержать несколько схемат.
AT — аббревиатура для Архетипов
Поля, Классы и Объекты
Поля Архетипов — это объекты Python, содержащиеся в схеме. Поле определяется один раз для класса содержимого. Единственный экземпляр поля используется для каждого экземпляра класса. Следовательно, отношение между экземплярами Поля и классами контента можно определить следующим образом: «экземпляр поля принадлежит только одному классу». Однако, класс может содержать много разных экземпляров полей. Более того, каждый экземпляр AT класса использует единый набор полей. AT объекты сами по себе не содержат уникальных полей.
При старте Zope в процессе инициализации продукта Архетипы считывают схемы зарегистрированных классов и автоматически генерирует методы для чтения (accessor) и изменения (mutator) каждого из объявленых полей.
Шаблоны схемы
Архетипы включают в себя три шаблона схем:
- BaseSchema определяет обычный тип контента
- BaseFolderSchema определяет тип контента ведущий себя как папка (объект может содержать другие объекты)
- BaseBTreeFolderSchema используется для папок, которые должны манипулировать сотнями или тысячами объектов (может даже и миллионами)
Все три типа схем включают в себя id и title, а также стандартный набор полей метаданных Dublin Core.
Изменение полей существующей схемы
Изменение существующего поля схемы возможно с помощью следующего синтаксиса:
schema['<field_name>'].attribute = value
Например, чтобы изменить название виджета поля description (уже доступного в BaseSchema), вы можете написать (в своем собственном определении схемы на основе BaseSchema):
schema['description'].widget.label = u'Summary'
Поля схемы упорядочены и обычно первые поля показываются первыми в формах добавления и редактирования контента. Если нужно изменить порядок полей в схеме, используйте метод moveField:
- Поместить
поле до другого поля:
schema.moveField('<field_to_move>', before='<field_to_place_it_before>') - Поместить поле после
другого поля:
schema.moveField('<field_to_move>', after='<field_to_place_it_after>') - Поместить поле наверх
схемы:
schema.moveField('<field_to_move>', pos='top') - Поместить поле вниз
схемы:
schema.moveField('<field_to_move>', pos='bottom') - Переместить поле в
указанную позицию:
schema.moveField('<field_to_move>', pos=0)

Предыдущий: Что такое Архетипы?
