SlideShare uma empresa Scribd logo
1 de 44
СОЗДАНИЕ ПОЛЬЗОВАТЕЛЬСКИХ 
ТИПОВ В DEXTERITY
Генерация скелета продукта 
 Используем paster установленный в 
Plone 
 Вызов производится из каталога src 
 ..binpaster create –t шаблон имя_продукта
 Выбираем режим создания "easy” нажатием 
клавищи “Enter”
Получение списка шаблонов 
..binpaster create –list-templates - список 
доступных швблонов 
plone_basic - основной выбор
 Отвечаем «True» на вопрос о создании 
GenericSetup profile. 
 Пакет GenericSetup позволяет регистрировать 
продукт в Plone
Возможная ощибка 
 Пока игнорируем 
 No egg-info directory found (looked in 
.StudentsManager.StudentsManager.egg-info, 
.StudentsManagerbootstrap.pyStudentsManager.egg-info, 
.StudentsManagerbufgStudentsManager.egg-info, 
.StudentsManagerCHANGES.txtStudentsManager.egg-info, 
.StudentsManagerCONTRIBUTORS.txtStudentsManager.egg-info, 
.StudentsManagerudentsManager.egg-info, 
.StudentsManagerREADME.txtStudentsManager.egg-info, 
.StudentsManagersetup.pyStudentsManager.egg-info, 
.StudentsManagersrcStudentsManager/egg-info)
Каталог продукта 
 В каталог srcStudentManagerStudentManager 
располагаем файлы с кодом 
 В каталог profilesdefault помещаем 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.StudentMan 
ager”) 
 Фабрика сообщений инкапсулирует 
обработку строковых значений в продукте, в 
частности обеспечивает поддержку разных 
языков переводав формах и страницах
Student type, файл student.py
 Для регистрации типа в папке 
profilesdefaulte создадим 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;&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>
 Модуль 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>

Mais conteúdo relacionado

Semelhante a создание пользовательских типов в Dexterity

Разработка проекта в CMS Plone
Разработка проекта в CMS PloneРазработка проекта в CMS Plone
Разработка проекта в CMS PloneSergey Greger
 
Применение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовПрименение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовPyNSK
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноKrivoy Rog IT Community
 
Master class bars group ext js4
Master class bars group   ext js4Master class bars group   ext js4
Master class bars group ext js4Radik Fattakhov
 
C# Desktop. Занятие 08.
C# Desktop. Занятие 08.C# Desktop. Занятие 08.
C# Desktop. Занятие 08.Igor Shkulipa
 
Selenium RC + python: история одного проекта
Selenium RC + python: история одного проектаSelenium RC + python: история одного проекта
Selenium RC + python: история одного проектаKonstantin Prishchenko
 
Django шахрай. версия 4
Django шахрай. версия 4Django шахрай. версия 4
Django шахрай. версия 4smikler
 
Trening modul2-webinar11
Trening modul2-webinar11Trening modul2-webinar11
Trening modul2-webinar11olgaoov
 
Инсталляционные профили, создание сборок
Инсталляционные профили, создание сборокИнсталляционные профили, создание сборок
Инсталляционные профили, создание сборокAndrii Podanenko
 
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...it-people
 
Разработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconruРазработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconruJetStyle
 
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoPycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoIlya Shalyapin
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf Conference
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansmetaform
 
Первые шаги после установки WordPress
Первые шаги после установки WordPressПервые шаги после установки WordPress
Первые шаги после установки WordPressDarja Kruzhkova
 

Semelhante a создание пользовательских типов в Dexterity (20)

Разработка проекта в CMS Plone
Разработка проекта в CMS PloneРазработка проекта в CMS Plone
Разработка проекта в CMS Plone
 
Zend Framework и Doctrine
Zend Framework и DoctrineZend Framework и Doctrine
Zend Framework и Doctrine
 
Применение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовПрименение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектов
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
 
Master class bars group ext js4
Master class bars group   ext js4Master class bars group   ext js4
Master class bars group ext js4
 
C# Desktop. Занятие 08.
C# Desktop. Занятие 08.C# Desktop. Занятие 08.
C# Desktop. Занятие 08.
 
Selenium RC + python: история одного проекта
Selenium RC + python: история одного проектаSelenium RC + python: история одного проекта
Selenium RC + python: история одного проекта
 
Django шахрай. версия 4
Django шахрай. версия 4Django шахрай. версия 4
Django шахрай. версия 4
 
Что нового в Django 1.4
Что нового в Django 1.4Что нового в Django 1.4
Что нового в Django 1.4
 
Symfony 3
Symfony 3Symfony 3
Symfony 3
 
Trening modul2-webinar11
Trening modul2-webinar11Trening modul2-webinar11
Trening modul2-webinar11
 
Инсталляционные профили, создание сборок
Инсталляционные профили, создание сборокИнсталляционные профили, создание сборок
Инсталляционные профили, создание сборок
 
лек13 3
лек13 3лек13 3
лек13 3
 
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
 
Разработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconruРазработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconru
 
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoPycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и Django
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
 
2010-11 (ПБД) Вологжанин Д.Г.
2010-11 (ПБД) Вологжанин Д.Г.2010-11 (ПБД) Вологжанин Д.Г.
2010-11 (ПБД) Вологжанин Д.Г.
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeans
 
Первые шаги после установки WordPress
Первые шаги после установки WordPressПервые шаги после установки WordPress
Первые шаги после установки WordPress
 

Mais de Sergey Greger

Реалтзация связанных списков в CMS Plone
Реалтзация связанных списков в CMS PloneРеалтзация связанных списков в CMS Plone
Реалтзация связанных списков в CMS PloneSergey Greger
 
Встроенные Java scripts в plone 3
Встроенные Java scripts в plone 3Встроенные Java scripts в plone 3
Встроенные Java scripts в plone 3Sergey Greger
 
разработка контент типа через Web
разработка контент типа  через Webразработка контент типа  через Web
разработка контент типа через WebSergey Greger
 
Каталоги и поиск в plone
Каталоги и поиск в ploneКаталоги и поиск в plone
Каталоги и поиск в ploneSergey Greger
 
компоненты E learn для Plone
компоненты E learn для Ploneкомпоненты E learn для Plone
компоненты E learn для PloneSergey Greger
 
Реализация инструментальной среды семантического моделирования учебного про...
Реализация  инструментальной среды семантического  моделирования учебного про...Реализация  инструментальной среды семантического  моделирования учебного про...
Реализация инструментальной среды семантического моделирования учебного про...Sergey Greger
 

Mais de Sergey Greger (6)

Реалтзация связанных списков в CMS Plone
Реалтзация связанных списков в CMS PloneРеалтзация связанных списков в CMS Plone
Реалтзация связанных списков в CMS Plone
 
Встроенные Java scripts в plone 3
Встроенные Java scripts в plone 3Встроенные Java scripts в plone 3
Встроенные Java scripts в plone 3
 
разработка контент типа через Web
разработка контент типа  через Webразработка контент типа  через Web
разработка контент типа через Web
 
Каталоги и поиск в plone
Каталоги и поиск в ploneКаталоги и поиск в plone
Каталоги и поиск в plone
 
компоненты E learn для Plone
компоненты E learn для Ploneкомпоненты E learn для Plone
компоненты E learn для Plone
 
Реализация инструментальной среды семантического моделирования учебного про...
Реализация  инструментальной среды семантического  моделирования учебного про...Реализация  инструментальной среды семантического  моделирования учебного про...
Реализация инструментальной среды семантического моделирования учебного про...
 

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

  • 2. Генерация скелета продукта  Используем paster установленный в Plone  Вызов производится из каталога src  ..binpaster create –t шаблон имя_продукта
  • 3.  Выбираем режим создания "easy” нажатием клавищи “Enter”
  • 4. Получение списка шаблонов ..binpaster create –list-templates - список доступных швблонов plone_basic - основной выбор
  • 5.  Отвечаем «True» на вопрос о создании GenericSetup profile.  Пакет GenericSetup позволяет регистрировать продукт в Plone
  • 6. Возможная ощибка  Пока игнорируем  No egg-info directory found (looked in .StudentsManager.StudentsManager.egg-info, .StudentsManagerbootstrap.pyStudentsManager.egg-info, .StudentsManagerbufgStudentsManager.egg-info, .StudentsManagerCHANGES.txtStudentsManager.egg-info, .StudentsManagerCONTRIBUTORS.txtStudentsManager.egg-info, .StudentsManagerudentsManager.egg-info, .StudentsManagerREADME.txtStudentsManager.egg-info, .StudentsManagersetup.pyStudentsManager.egg-info, .StudentsManagersrcStudentsManager/egg-info)
  • 7. Каталог продукта  В каталог srcStudentManagerStudentManager располагаем файлы с кодом  В каталог profilesdefault помещаем xml-файлы для регистрации продукта
  • 8. Файл setup.py  В файле определяем дополнительные пакеты, которые должны быть установлены
  • 9. Файл setup.py  Секция install_ requires служит для добавления зависимых пакетов install_requires=[ 'setuptools', 'five.grok', ], Добавляем пакет five.grok для упрощения регистрации в дальнейшем
  • 10. Составляющие контент-типа  Каждый Dexterity контент-тип состоит из схемы и конфигурационной записи FTI  Factory Type Information (FTI)– конфигурационная запись в реестре типов portal_types в ZMI.  Схема определяет свойства контент типа  Обычно для каждой схемы создается отдельный файл
  • 11. UML диаграмма продукта  Класс Division позволяет строить иерархическую структуру организации.  Факультет-> Поток ->  Группа
  • 12.  В Plone свойства класса реализуют поля, объявленные в схеме интерфейса класса  Схема = интерфейс, в котором определены поля  Это позволяет использовать схему интерфейса для разных классов
  • 13.  Определение большинства типов полей находится в zope.schema  Обычно поля наследуют класс plone.directives.form.Schema, который позволяет генерировать формы на основе схемы
  • 14. __init__.py  В файле __init__.py создадим экземпляр фабрики сообщений  from zope.i18nmessageid import MessageFactory  _ = MessageFactory(“StudentManager.StudentMan ager”)  Фабрика сообщений инкапсулирует обработку строковых значений в продукте, в частности обеспечивает поддержку разных языков переводав формах и страницах
  • 16.  Для регистрации типа в папке profilesdefaulte создадим xml-файл types.xml и папку type
  • 17.  В файле types.xml создается регистр всех контент – типов продукта с указанием их FTI  Определение основных свойств контент типа производится в отдельном для каждого типа файле в папке type  Имя файла определяется как имя типа.xml  В нашем случае Student.xml
  • 18. Factory Type Information регистрация в profiles/default/types.xml <object name="portal_types"> <object name=“StudentManager.StudentManager.Student" meta_type="Dexterity FTI" /> </object>
  • 19. 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">
  • 20. <!– имя иконки --> <property name="content_icon">user.gif</property> <!– разрешение на комментирование --> <property name="allow_discussion">True</property>
  • 21. <!– указание на schema interface --> <property name="schema"> StudentManager.StudentManager.IStudent </property> <!– определяет что класс не контейнер --> <property name="klass">plone.dexterity.content.Item </property> <!– указание роли пользователя --> <property name="add_permission">cmf.AddPortalContent </property>
  • 22. <!-- 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>
  • 23. <!– формирование адресов видов --> <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>
  • 25.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 37.  В Dexterity FTI мы можем определять схему типа тремя способами:  schema: через имя интерфейса.  model_source: XML строка, представляющая тип. Генерируется и сохраняется черезTTW редактор.  model_file: путь к XML файлу, представляющему тип
  • 38. Экспорт профиля и схемы  Произвести экспорт профиля и экспорт типа - "Export Schema Profiles" и “Export Scheme Models” в панели управления
  • 39. Результат экспорта После экспорта имеем два одноименных файла presenter.xml В одном из них схема в другом ( в папке types )– регистрация типа
  • 40. 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>
  • 41. Перенос модели в файл  поместить полученный файл types.xml и папку types в папку профиля (profile) продукта  Очистить свойство model_source property  установить свойство a model_file: <property name="model_file">путь к файлу модели</property>  Например shuttlethread.farmyard.models:animal.xml
  • 42. часть 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>
  • 43.  Модуль plone.supermodel позволяет добавлять в XML schema набор полей, также как с использованием интерфейсов  Схема может быть именованной или нет  Именованная схема добавляет на форме соответствующую вкладку  Обычно имеют дело с единственной неименованной схемой в файле
  • 44. Именованная схема <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>