создание пользовательских типов в dexterity
Post on 09-Jul-2015
69 Views
Preview:
DESCRIPTION
TRANSCRIPT
СОЗДАНИЕ ПОЛЬЗОВАТЕЛЬСКИХ ТИПОВ В DEXTERITY
Генерация скелета продукта
Используем paster установленный в Plone
Вызов производится из каталога src
..\bin\paster create –t шаблон имя_продукта
Выбираем режим создания "easy” нажатием клавищи “Enter”
Получение списка шаблонов
plone_basic - основной выбор
..\bin\paster create –list-templates - список доступных швблонов
Отвечаем « True» на вопрос о создании GenericSetup profile.
Пакет GenericSetup позволяет регистрировать продукт в Plone
Возможная ощибка Пока игнорируем
No egg-info directory found (looked in .\StudentsManager\.\StudentsManager.egg-info, .\StudentsManager\bootstrap.py\StudentsManager.egg-info, .\StudentsManager\bufg\StudentsManager.egg-info, .\StudentsManager\CHANGES.txt\StudentsManager.egg-info, .\StudentsManager\CONTRIBUTORS.txt\StudentsManager.egg-info, .\StudentsManagerudentsManager.egg-info, .\StudentsManager\README.txt\StudentsManager.egg-info, .\StudentsManager\setup.py\StudentsManager.egg-info, .\StudentsManager\src\StudentsManager/egg-info)
Каталог продукта
В каталог src\StudentManager\StudentManagerрасполагаем файлы с кодом
В каталог profiles\default помещаем xml-файлы для регистрации продукта
Файл setup.py
В файле определяем дополнительные пакеты, которые должны быть установлены
Файл setup.py
Секция install_ requires служит для добавления зависимых пакетов
install_requires=[ 'setuptools',
'five.grok',
],
Добавляем пакет five.grok для упрощения регистрации в дальнейшем
Составляющие контент-типа
Каждый Dexterity контент-тип состоит из схемы и конфигурационной записи FTI
Factory Type Information (FTI)–конфигурационная запись в реестре типов portal_types в ZMI.
Схема определяет свойства контент типа
Обычно для каждой схемы создается отдельный файл
UML диаграмма продукта
Класс Divisionпозволяет строить иерархическую структуру организации.
Факультет-> Поток ->
Группа
В Plone свойства класса реализуют поля, объявленные в схеме интерфейса класса
Схема = интерфейс, в котором определены поля
Это позволяет использовать схему интерфейса для разных классов
Определение большинства типов полей находится в zope.schema
Обычно поля наследуют классplone.directives.form.Schema, который позволяет генерировать формы на основе схемы
__init__.py
В файле __init__.py создадим экземпляр фабрики сообщений
from zope.i18nmessageid import MessageFactory
_ = MessageFactory(“StudentManager.StudentManager”)
Фабрика сообщений инкапсулирует обработку строковых значений в продукте, в частности обеспечивает поддержку разных языков переводав формах и страницах
Student type, файл student.py
Для регистрации типа в папке profiles\defaulte создадим xml-файл types.xml и папку type
В файле types.xml создается регистр всех контент – типов продукта с указанием их FTI
Определение основных свойств контент типа производится в отдельном для каждого типа файле в папке type
Имя файла определяется как имя типа.xml
В нашем случае Student.xml
Factory Type Information
регистрация в profiles/default/types.xml
<object name="portal_types">
<object name=“StudentManager.StudentManager.Student" meta_type="Dexterity FTI" />
</object>
Student.xml
<?xml version="1.0"?>
<object
name=" Student "
meta_type="Dexterity FTI" i18n:domain="StudentManager.StudentManag
er" xmlns:i18n="http://xml.zope.org/namespaces/i18n">
<!– имя иконки -->
<property name="content_icon">user.gif</property>
<!– разрешение на комментирование -->
<property name="allow_discussion">True</property>
<!– указание на schema interface -->
<property name="schema">StudentManager.StudentManager.IStudent</property>
<!– определяет что класс не контейнер --> <property name="klass">plone.dexterity.content.Item</property> <!– указание роли пользователя --><property
name="add_permission">cmf.AddPortalContent</property>
<!-- enabled behaviors -->
<property name="behaviors">
<element value="plone.app.content.interfaces.INameFromTitle" />
</property>
<!– определение видов -->
<property name="default_view">view</property>
<property name="default_view_fallback">False</property>
<property name="view_methods">
<element value="view"/>
</property>
<!– формирование адресов видов -->
<alias from="(Default)" to="(dynamic view)"/>
<alias from="edit" to="@@edit"/>
<alias from="sharing" to="@@sharing"/>
<alias from="view" to="(selected layout)"/>
<!– определение вкладок меню управления -->
<action title="View" action_id="view" category="object" condition_expr="" url_expr="string:${object_url}" visible="True">
<permission value="View"/>
</action>
<action title="Edit" action_id="edit" category="object" condition_expr="" url_expr="string:${object_url}/edit" visible="True">
<permission value="Modify portal content"/>
</action>
</object>
УСТАНОВКА ПРОДУКТА
РАЗРАБОТКА ЧЕРЕЗ WEB
тип “Presenter”
ИСПОЛЬЗОВАНИЕ МОДЕЛИ В ПРОДУКТЕ
В Dexterity FTI мы можем определять схему типа тремя способами:
schema: через имя интерфейса.
model_source: XML строка, представляющая тип. Генерируется и сохраняется через TTW редактор.
model_file: путь к XML файлу, представляющему тип
Экспорт профиля и схемы
Произвести экспорт профиля и экспорт типа - "Export Schema Profiles" и “Export Scheme Models” в панели управления
Результат экспорта
После экспорта имеем два одноименных файла presenter.xmlВ одном из них схемав другом ( в папке types )– регистрация типа
Presenter - схема
<model xmlns="http://namespaces.plone.org/supermodel/schema">
<schema>
<field name="bio" type="plone.app.textfield.RichText"> <description /> <title>Биография</title> </field> <field name="picture" type="plone.namedfile.field.NamedImage"> <description /> <title>Фото</title>
</field>
</schema>
</model>
Перенос модели в файл
поместить полученный файл types.xml и папку types в папку профиля (profile) продукта
Очистить свойство model_source property
установить свойство a model_file:<property name="model_file">путь к файлу модели</property>
Например shuttlethread.farmyard.models:animal.xml
часть presenter.xml в папке types<property name="model_source"><model xmlns=http://namespaces.plone.org/supermodel/schema> <schema> <field name="bio" type="plone.app.textfield.RichText“><description /> <title><#1041;&#1080;&#1086;&#1075;&#1088;&#1072;&#1092;&#1080;&#1103;</title> </field><field name="picture" type="plone.namedfile.field.NamedImage> <description /> <title>&#1060;&#1086;&#1090;&#1086;</title> <//field></schema></model></property>
Модуль plone.supermodel позволяет добавлять в XML schema набор полей, также как с использованием интерфейсов
Схема может быть именованной или нет
Именованная схема добавляет на форме соответствующую вкладку
Обычно имеют дело с единственной неименованной схемой в файле
Именованная схема
<schema name="metadata">
<field type="zope.schema.Datetime" name="created">
<title>Created date</title> <required>False</required>
</field>
<field type="zope.schema.TextLine" name="creator">
<title>Creator</title>
<description>Name of the creator</description>
<required>True</required>
</field>
</schema>
top related