создание пользовательских типов в dexterity

44
СОЗДАНИЕ ПОЛЬЗОВАТЕЛЬСКИХ ТИПОВ В DEXTERITY

Upload: -

Post on 09-Jul-2015

83 views

Category:

Design


4 download

DESCRIPTION

Рассмоьрен процесс создание пользовательских типов для CMS Plone с использованием пакета Dexterity

TRANSCRIPT

Page 1: создание пользовательских типов в Dexterity

СОЗДАНИЕ ПОЛЬЗОВАТЕЛЬСКИХ ТИПОВ В DEXTERITY

Page 2: создание пользовательских типов в Dexterity

Генерация скелета продукта

Используем paster установленный в Plone

Вызов производится из каталога src

..\bin\paster create –t шаблон имя_продукта

Page 3: создание пользовательских типов в Dexterity

Выбираем режим создания "easy” нажатием клавищи “Enter”

Page 4: создание пользовательских типов в Dexterity

Получение списка шаблонов

plone_basic - основной выбор

..\bin\paster create –list-templates - список доступных швблонов

Page 5: создание пользовательских типов в Dexterity

Отвечаем « True» на вопрос о создании GenericSetup profile.

Пакет GenericSetup позволяет регистрировать продукт в Plone

Page 6: создание пользовательских типов в Dexterity

Возможная ощибка Пока игнорируем

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)

Page 7: создание пользовательских типов в Dexterity

Каталог продукта

В каталог src\StudentManager\StudentManagerрасполагаем файлы с кодом

В каталог profiles\default помещаем xml-файлы для регистрации продукта

Page 8: создание пользовательских типов в Dexterity

Файл setup.py

В файле определяем дополнительные пакеты, которые должны быть установлены

Page 9: создание пользовательских типов в Dexterity

Файл setup.py

Секция install_ requires служит для добавления зависимых пакетов

install_requires=[ 'setuptools',

'five.grok',

],

Добавляем пакет five.grok для упрощения регистрации в дальнейшем

Page 10: создание пользовательских типов в Dexterity

Составляющие контент-типа

Каждый Dexterity контент-тип состоит из схемы и конфигурационной записи FTI

Factory Type Information (FTI)–конфигурационная запись в реестре типов portal_types в ZMI.

Схема определяет свойства контент типа

Обычно для каждой схемы создается отдельный файл

Page 11: создание пользовательских типов в Dexterity

UML диаграмма продукта

Класс Divisionпозволяет строить иерархическую структуру организации.

Факультет-> Поток ->

Группа

Page 12: создание пользовательских типов в Dexterity

В Plone свойства класса реализуют поля, объявленные в схеме интерфейса класса

Схема = интерфейс, в котором определены поля

Это позволяет использовать схему интерфейса для разных классов

Page 13: создание пользовательских типов в Dexterity

Определение большинства типов полей находится в zope.schema

Обычно поля наследуют классplone.directives.form.Schema, который позволяет генерировать формы на основе схемы

Page 14: создание пользовательских типов в Dexterity

__init__.py

В файле __init__.py создадим экземпляр фабрики сообщений

from zope.i18nmessageid import MessageFactory

_ = MessageFactory(“StudentManager.StudentManager”)

Фабрика сообщений инкапсулирует обработку строковых значений в продукте, в частности обеспечивает поддержку разных языков переводав формах и страницах

Page 15: создание пользовательских типов в Dexterity

Student type, файл student.py

Page 16: создание пользовательских типов в Dexterity

Для регистрации типа в папке profiles\defaulte создадим xml-файл types.xml и папку type

Page 17: создание пользовательских типов в Dexterity

В файле types.xml создается регистр всех контент – типов продукта с указанием их FTI

Определение основных свойств контент типа производится в отдельном для каждого типа файле в папке type

Имя файла определяется как имя типа.xml

В нашем случае Student.xml

Page 18: создание пользовательских типов в Dexterity

Factory Type Information

регистрация в profiles/default/types.xml

<object name="portal_types">

<object name=“StudentManager.StudentManager.Student" meta_type="Dexterity FTI" />

</object>

Page 19: создание пользовательских типов в Dexterity

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">

Page 20: создание пользовательских типов в Dexterity

<!– имя иконки -->

<property name="content_icon">user.gif</property>

<!– разрешение на комментирование -->

<property name="allow_discussion">True</property>

Page 21: создание пользовательских типов в Dexterity

<!– указание на schema interface -->

<property name="schema">StudentManager.StudentManager.IStudent</property>

<!– определяет что класс не контейнер --> <property name="klass">plone.dexterity.content.Item</property> <!– указание роли пользователя --><property

name="add_permission">cmf.AddPortalContent</property>

Page 22: создание пользовательских типов в Dexterity

<!-- 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>

Page 23: создание пользовательских типов в Dexterity

<!– формирование адресов видов -->

<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>

Page 24: создание пользовательских типов в Dexterity

УСТАНОВКА ПРОДУКТА

Page 25: создание пользовательских типов в Dexterity
Page 26: создание пользовательских типов в Dexterity

РАЗРАБОТКА ЧЕРЕЗ WEB

Page 27: создание пользовательских типов в Dexterity
Page 28: создание пользовательских типов в Dexterity
Page 29: создание пользовательских типов в Dexterity
Page 30: создание пользовательских типов в Dexterity
Page 31: создание пользовательских типов в Dexterity
Page 32: создание пользовательских типов в Dexterity
Page 33: создание пользовательских типов в Dexterity
Page 34: создание пользовательских типов в Dexterity
Page 35: создание пользовательских типов в Dexterity

тип “Presenter”

Page 36: создание пользовательских типов в Dexterity

ИСПОЛЬЗОВАНИЕ МОДЕЛИ В ПРОДУКТЕ

Page 37: создание пользовательских типов в Dexterity

В Dexterity FTI мы можем определять схему типа тремя способами:

schema: через имя интерфейса.

model_source: XML строка, представляющая тип. Генерируется и сохраняется через TTW редактор.

model_file: путь к XML файлу, представляющему тип

Page 38: создание пользовательских типов в Dexterity

Экспорт профиля и схемы

Произвести экспорт профиля и экспорт типа - "Export Schema Profiles" и “Export Scheme Models” в панели управления

Page 39: создание пользовательских типов в Dexterity

Результат экспорта

После экспорта имеем два одноименных файла presenter.xmlВ одном из них схемав другом ( в папке types )– регистрация типа

Page 40: создание пользовательских типов в Dexterity

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>

Page 41: создание пользовательских типов в Dexterity

Перенос модели в файл

поместить полученный файл types.xml и папку types в папку профиля (profile) продукта

Очистить свойство model_source property

установить свойство a model_file:<property name="model_file">путь к файлу модели</property>

Например shuttlethread.farmyard.models:animal.xml

Page 42: создание пользовательских типов в Dexterity

часть 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;&amp;#1080;&amp;#1086;&amp;#1075;&amp;#1088;&amp;#1072;&amp;#1092;&amp;#1080;&amp;#1103;</title> </field><field name="picture" type="plone.namedfile.field.NamedImage> <description /> <title>&amp;#1060;&amp;#1086;&amp;#1090;&amp;#1086;</title> <//field></schema></model></property>

Page 43: создание пользовательских типов в Dexterity

Модуль plone.supermodel позволяет добавлять в XML schema набор полей, также как с использованием интерфейсов

Схема может быть именованной или нет

Именованная схема добавляет на форме соответствующую вкладку

Обычно имеют дело с единственной неименованной схемой в файле

Page 44: создание пользовательских типов в Dexterity

Именованная схема

<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>