SlideShare a Scribd company logo
1 of 56
РАЗРАБОТКА ПРОЕКТА НА CMS 
PLONE
Содержание 
 Моделирование в UML 
 Макет UI 
 Создание пользовательских типов в 
Dexterity 
 Разработка через web 
 Использование модели в продукте
 Plone поддерживает трпдиционную веб- 
разработку: скрипты, шаблоны 
 Plone проявляет свой потенциал при 
моделировании приложения в терминах 
иерархических контент-типов
МОДЕЛИРОВАНИЕ В UML
Проект «ИС медиа-холдинга» 
 Холдинг «Cinema Group» – фирма, 
обладающая несколькими кинотеатрами 
 Фирма имеет ограниченное 
представительство в Интернет, но хотела 
бы расширить его с целью: 
 предоставления возможности 
оперативного информирования об идущих 
кинофильмах 
 для предварительного бронирования 
билетов на киносеансы
 Рассмотренные примеры взяты из книги 
 Martin Aspeli 
 Professional Plone 4 Development
 Критерии важности 
 1. **************************** 
 2. **************************** 
 3. ****************************
Требования 
 Сайт должен визуально представлять торговую 
марку холдинга 
 Сайт должен отображать информацию о всех 
кинотеатрах 
 Обычные сотрудники кинотеатра должны быть 
способны изменять информацию о кинотеатре 
 Сотрудники кинотеатра должны иметь 
возможность вводить и изменять информацию 
как о идущих фильмах, так и о предстоящих 
событиях 
 Сотрудник и могут публиковать информацию о 
новых фильмах и изменять ее после премьеры 
фильма
 Пользователь должен получать информацию о 
месте и времени демонстрации выбранного 
фильма 
 Расписание демонстраций фильмов изменяется 
и запрашивается с использованием 
существующей реляционной базы данных 
 Можно просматривать информацию как о 
фильмах находящихся в прокате , так и 
ожидающих проката в ближайшее время 
 Пользователь может выбирать в качестве 
критерия поиска и просмотра информации о 
фильме как расположение кинотеатра, так и 
время показа
 Пользователь может резервировать билеты 
через сайт 
 Пользователь получает и оплачивает билеты в 
кинотеатре 
 Система заказа билетов должна 
взаимодействовать с уже существующей 
системой заказа, использующую RDBM 
 Все медиаресурсы на сайте должны быть 
снабжены специальным Digital Asset 
Management Code, который используется для 
предоставления доступа к ресурсам сторонними 
система
 Пользователи не обязаны регистрироваться на сайте, 
но регистрационные данные должны требоваться при 
заказе билетов 
 Пользователь может указывать наиболее 
предпочтительные для него кинотеатры и получать о 
них информацию в личном кабинете 
 Пользователи могут регистрироваться и 
авторизоваться используя свою учетную запись в 
Facebook 
 Пользователи должны иметь возможность посылать 
запросы по электронной почте на сайт, если у них есть 
вопросы или пожелания 
 Пользователи должны иметь возможность обсуждать 
фильмы и определять их рейтинг
прецеденты
Модель сайта
МАКЕТ UI
Section Purpose Content 
 
types 
Видимость 
Home Front page, contains general information Folder, 
Page 
все 
About Optilux General information about Optilux 
Cinemas 
Folder, 
Page 
все 
About 
membership 
Information about membership benefits Folder, 
Page 
все 
Films Container for films, including film listing Film 
Folder 
все 
First film Information about a film currently 
showing 
Film все 
Unpublished 
film 
A film not yet visible to the public Film штат 
Cinemas Container for cinemas, including listings Cinema 
Folder 
все 
Region one Container for cinemas in one region Cinema 
Folder 
все 
Promotion A promotion specific to Region one Promotion все
Видимость 
Cinema one A cinema in Region one Cinema все 
Screening 
times 
Listing of screening times for films Screening все 
Reserve Form to reserve tickets for a 
screening 
Reservation Member 
Cinema two Another cinema in Region one Cinema все 
Promotion A promotion specific to Cinema two Promotion все 
Future 
promotion 
A promotion not yet visible Promotion Staff 
Corporate 
information 
General corporate information Folder, Page все 
Project one A project, visible to all staff Folder Staff 
Project two Another project, private to one 
group 
Folder Some staff
Расширение модели
СОЗДАНИЕ ПОЛЬЗОВАТЕЛЬСКИХ 
ТИПОВ В DEXTERITY
Генерация скелета продукта 
 Используем paster установленный для 
системного Python 2.6 
 C:>easy_install "ZopeSkel<2.99“ 
 paster create –t plone example.conference 
 Выбираем режим создания "easy" 
 Отвечаем «True» на вопрос о создании 
GenericSetup profile.
setup.py 
 Опция install_ requires служит для 
добавления зависимых пакетов 
install_requires=[ 'setuptools', 'Plone', 
'plone.app.dexterity', 
'collective.autopermission', ], 
entry_points=""" [z3c.autoinclude.plugin]
 Каждый Dexterity контент-тип состоит из 
схемы и FTI 
 Factory Type Information – 
конфигурационная запись в portal_types в 
ZMI. 
 Обычно для каждой схемы создается 
отдельный файл
 Схема = интерфейс, в котором определены 
поля 
 Определение большинства типов полей 
находится в zope.schema. 
 Обычно поля наследуют класс 
plone.directives.form.Schema, который 
позволяет генерировать формы на основе 
схемы
 Рассмотрим создание продукта 
 example.conference
__init__.py 
 from zope.i18nmessageid import 
MessageFactory 
 _ = MessageFactory("example.conference") 
 Фабрика сообщений инкапсулирует 
обработку строковых значений в 
продукте, в частности согласование 
перевода
Presenter type, presenter.py 
from five import grok 
from zope import schema 
from plone.directives import form, dexterity 
from plone.app.textfield import RichText 
from plone.namedfile.field import 
NamedImage 
from example.conference import _
class IPresenter(form.Schema): 
"""A conference presenter. Presenters can be 
added anywhere. """ 
title = schema.TextLine( title=_(u"Name"), ) 
description = schema.Text( title=_(u"A short 
summary"), ) 
bio = RichText( title=_(u"Bio"), required=False ) 
picture = NamedImage( title=_(u"Picture"), 
description=_(u"Please upload an image"), 
required=False, )
Program type, program.py 
from five import grok 
from zope import schema 
from plone.directives import form, dexterity 
from plone.app.textfield import RichText 
from example.conference import _ class
IProgram(form.Schema): 
"""A conference program. Programs can contain 
Sessions. """ 
title = schema.TextLine( title=_(u"Program name"), ) 
description = schema.Text( title=_(u"Program 
summary"), ) 
start = schema.Datetime( title=_(u"Start date"), 
required=False, ) end = schema.Datetime( 
title=_(u"End date"), required=False, ) 
details = RichText( title=_(u"Details"), 
description=_(u"Details about the program"), 
required=False)
session.py Session type 
from five import grok 
from zope import schema 
from plone.directives import form, dexterity 
from plone.app.textfield import RichText
class ISession(form.Schema): 
"""A conference session. Sessions are 
managed inside Programs. ""“ 
title = schema.TextLine( title=_(u"Title"), 
description=_(u"Session title"), ) 
description = schema.Text( title=_(u"Session 
summary"), ) 
details = RichText( title=_(u"Session details"), 
required=False )
Factory Type Information 
регистрация в profiles/default/types.xml 
<object name="portal_types"> 
<object name="example.conference.presenter" 
meta_type="Dexterity FTI" /> 
<object name="example.conference.program" 
meta_type="Dexterity FTI" /> 
<object name="example.conference.session" 
meta_type="Dexterity FTI" /> 
</object>
 Для каждого типа создается XML файл в 
profiles/default/types 
 example.conference.presenter.xml 
 example.conference.program.xml 
 example.conference.session.xml
Presenter type 
<?xml version="1.0"?> <object 
name="example.conference.presenter" 
meta_type="Dexterity FTI" 
i18n:domain="example.conference" 
xmlns:i18n="http://xml.zope.org/namespaces/i1 
8n"> 
<!-- Basic metadata --> 
<property name="title" 
i18n:translate="">Presenter</property> 
<property name="description" 
i18n:translate="">A person presenting 
sessions</property>
<property name="content_icon">user.gif</property> 
<property name="allow_discussion">True</property> 
<property name="global_allow">True</property> 
<property name="filter_content_types">True</property> 
<property name="allowed_content_types" /> 
<!-- schema interface --> 
<property name="schema">example.conference.presenter.Ipresenter 
</property> 
<!-- class used for content items --> 
<property name="klass">plone.dexterity.content.Item 
</property> 
<!-- add permission --> 
<property name="add_permission">cmf.AddPortalContent</property>
<!-- enabled behaviors --> 
<property name="behaviors"> 
<element 
value="plone.app.content.interfaces.INameFromTitle" /> 
</property> 
<!-- View information --> 
<property name="default_view">view</property> 
<property name="default_view_fallback">False</property> 
<property name="view_methods"> 
<element value="view"/> 
</property>
<!-- Method aliases --> 
<alias from="(Default)" to="(dynamic view)"/> 
<alias from="edit" to="@@edit"/> 
<alias from="sharing" to="@@sharing"/> 
<alias from="view" to="(selected layout)"/> 
<!-- Actions --> 
<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>

More Related Content

Similar to Разработка проекта в CMS Plone

Виды QA: Всё что вы не знали и боялись спростить
Виды QA: Всё что вы не знали и боялись спроститьВиды QA: Всё что вы не знали и боялись спростить
Виды QA: Всё что вы не знали и боялись спроститьGoIT
 
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...GetDev.NET
 
Вводный вебинар по iRidium
Вводный вебинар по iRidiumВводный вебинар по iRidium
Вводный вебинар по iRidiumiRidiumMobile365
 
Inroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAPInroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAPmikhailshurgulaya
 
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''DneprCiklumEvents
 
Phalcon. Что нового?
Phalcon. Что нового?Phalcon. Что нового?
Phalcon. Что нового?Oleksandr Torosh
 
Enterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russianEnterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russianSergiy Shychynov
 
Microsoft Visual Studio 2010
Microsoft Visual Studio 2010Microsoft Visual Studio 2010
Microsoft Visual Studio 2010Alexander Babich
 
Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?Eugene Zharkov
 
Разработка оптимального ПО - создание раскадровок и сбор отзывов от заинтерес...
Разработка оптимального ПО - создание раскадровок и сбор отзывов от заинтерес...Разработка оптимального ПО - создание раскадровок и сбор отзывов от заинтерес...
Разработка оптимального ПО - создание раскадровок и сбор отзывов от заинтерес...Александр Шамрай
 
2013 07-22 тз-пожилая-система
2013 07-22 тз-пожилая-система2013 07-22 тз-пожилая-система
2013 07-22 тз-пожилая-системаKonstantin Belkin
 
Шаблонизируй это. Как паттерны требований облегчают жизнь аналитика
Шаблонизируй это. Как паттерны требований облегчают жизнь аналитикаШаблонизируй это. Как паттерны требований облегчают жизнь аналитика
Шаблонизируй это. Как паттерны требований облегчают жизнь аналитикаSQALab
 
Особенности тестирования мобильных приложений (Android, iOS)
Особенности тестирования мобильных приложений (Android, iOS)Особенности тестирования мобильных приложений (Android, iOS)
Особенности тестирования мобильных приложений (Android, iOS)Эльвина Сакаева
 
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...Dmitry Andreev
 
Symfony as the platform for open source projects (sympal, apostrophe, diem)
Symfony as the platform for open source projects (sympal, apostrophe, diem)Symfony as the platform for open source projects (sympal, apostrophe, diem)
Symfony as the platform for open source projects (sympal, apostrophe, diem)Alex Demchenko
 

Similar to Разработка проекта в CMS Plone (20)

Виды QA: Всё что вы не знали и боялись спростить
Виды QA: Всё что вы не знали и боялись спроститьВиды QA: Всё что вы не знали и боялись спростить
Виды QA: Всё что вы не знали и боялись спростить
 
Schedule PowerPoint
Schedule PowerPointSchedule PowerPoint
Schedule PowerPoint
 
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
 
лек11 3
лек11 3лек11 3
лек11 3
 
Symfony2 Best Practices
Symfony2 Best PracticesSymfony2 Best Practices
Symfony2 Best Practices
 
Вводный вебинар по iRidium
Вводный вебинар по iRidiumВводный вебинар по iRidium
Вводный вебинар по iRidium
 
Inroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAPInroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAP
 
Symfony 3
Symfony 3Symfony 3
Symfony 3
 
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
 
Phalcon. Что нового?
Phalcon. Что нового?Phalcon. Что нового?
Phalcon. Что нового?
 
Enterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russianEnterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russian
 
Microsoft Visual Studio 2010
Microsoft Visual Studio 2010Microsoft Visual Studio 2010
Microsoft Visual Studio 2010
 
Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?
 
Разработка оптимального ПО - создание раскадровок и сбор отзывов от заинтерес...
Разработка оптимального ПО - создание раскадровок и сбор отзывов от заинтерес...Разработка оптимального ПО - создание раскадровок и сбор отзывов от заинтерес...
Разработка оптимального ПО - создание раскадровок и сбор отзывов от заинтерес...
 
2013 07-22 тз-пожилая-система
2013 07-22 тз-пожилая-система2013 07-22 тз-пожилая-система
2013 07-22 тз-пожилая-система
 
Шаблонизируй это. Как паттерны требований облегчают жизнь аналитика
Шаблонизируй это. Как паттерны требований облегчают жизнь аналитикаШаблонизируй это. Как паттерны требований облегчают жизнь аналитика
Шаблонизируй это. Как паттерны требований облегчают жизнь аналитика
 
Особенности тестирования мобильных приложений (Android, iOS)
Особенности тестирования мобильных приложений (Android, iOS)Особенности тестирования мобильных приложений (Android, iOS)
Особенности тестирования мобильных приложений (Android, iOS)
 
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
 
Qt tool evaluation
Qt tool evaluationQt tool evaluation
Qt tool evaluation
 
Symfony as the platform for open source projects (sympal, apostrophe, diem)
Symfony as the platform for open source projects (sympal, apostrophe, diem)Symfony as the platform for open source projects (sympal, apostrophe, diem)
Symfony as the platform for open source projects (sympal, apostrophe, diem)
 

Разработка проекта в CMS Plone

  • 2. Содержание  Моделирование в UML  Макет UI  Создание пользовательских типов в Dexterity  Разработка через web  Использование модели в продукте
  • 3.  Plone поддерживает трпдиционную веб- разработку: скрипты, шаблоны  Plone проявляет свой потенциал при моделировании приложения в терминах иерархических контент-типов
  • 5. Проект «ИС медиа-холдинга»  Холдинг «Cinema Group» – фирма, обладающая несколькими кинотеатрами  Фирма имеет ограниченное представительство в Интернет, но хотела бы расширить его с целью:  предоставления возможности оперативного информирования об идущих кинофильмах  для предварительного бронирования билетов на киносеансы
  • 6.  Рассмотренные примеры взяты из книги  Martin Aspeli  Professional Plone 4 Development
  • 7.  Критерии важности  1. ****************************  2. ****************************  3. ****************************
  • 8. Требования  Сайт должен визуально представлять торговую марку холдинга  Сайт должен отображать информацию о всех кинотеатрах  Обычные сотрудники кинотеатра должны быть способны изменять информацию о кинотеатре  Сотрудники кинотеатра должны иметь возможность вводить и изменять информацию как о идущих фильмах, так и о предстоящих событиях  Сотрудник и могут публиковать информацию о новых фильмах и изменять ее после премьеры фильма
  • 9.  Пользователь должен получать информацию о месте и времени демонстрации выбранного фильма  Расписание демонстраций фильмов изменяется и запрашивается с использованием существующей реляционной базы данных  Можно просматривать информацию как о фильмах находящихся в прокате , так и ожидающих проката в ближайшее время  Пользователь может выбирать в качестве критерия поиска и просмотра информации о фильме как расположение кинотеатра, так и время показа
  • 10.  Пользователь может резервировать билеты через сайт  Пользователь получает и оплачивает билеты в кинотеатре  Система заказа билетов должна взаимодействовать с уже существующей системой заказа, использующую RDBM  Все медиаресурсы на сайте должны быть снабжены специальным Digital Asset Management Code, который используется для предоставления доступа к ресурсам сторонними система
  • 11.  Пользователи не обязаны регистрироваться на сайте, но регистрационные данные должны требоваться при заказе билетов  Пользователь может указывать наиболее предпочтительные для него кинотеатры и получать о них информацию в личном кабинете  Пользователи могут регистрироваться и авторизоваться используя свою учетную запись в Facebook  Пользователи должны иметь возможность посылать запросы по электронной почте на сайт, если у них есть вопросы или пожелания  Пользователи должны иметь возможность обсуждать фильмы и определять их рейтинг
  • 15.
  • 16. Section Purpose Content  types Видимость Home Front page, contains general information Folder, Page все About Optilux General information about Optilux Cinemas Folder, Page все About membership Information about membership benefits Folder, Page все Films Container for films, including film listing Film Folder все First film Information about a film currently showing Film все Unpublished film A film not yet visible to the public Film штат Cinemas Container for cinemas, including listings Cinema Folder все Region one Container for cinemas in one region Cinema Folder все Promotion A promotion specific to Region one Promotion все
  • 17. Видимость Cinema one A cinema in Region one Cinema все Screening times Listing of screening times for films Screening все Reserve Form to reserve tickets for a screening Reservation Member Cinema two Another cinema in Region one Cinema все Promotion A promotion specific to Cinema two Promotion все Future promotion A promotion not yet visible Promotion Staff Corporate information General corporate information Folder, Page все Project one A project, visible to all staff Folder Staff Project two Another project, private to one group Folder Some staff
  • 20. Генерация скелета продукта  Используем paster установленный для системного Python 2.6  C:>easy_install "ZopeSkel<2.99“  paster create –t plone example.conference  Выбираем режим создания "easy"  Отвечаем «True» на вопрос о создании GenericSetup profile.
  • 21. setup.py  Опция install_ requires служит для добавления зависимых пакетов install_requires=[ 'setuptools', 'Plone', 'plone.app.dexterity', 'collective.autopermission', ], entry_points=""" [z3c.autoinclude.plugin]
  • 22.  Каждый Dexterity контент-тип состоит из схемы и FTI  Factory Type Information – конфигурационная запись в portal_types в ZMI.  Обычно для каждой схемы создается отдельный файл
  • 23.  Схема = интерфейс, в котором определены поля  Определение большинства типов полей находится в zope.schema.  Обычно поля наследуют класс plone.directives.form.Schema, который позволяет генерировать формы на основе схемы
  • 24.  Рассмотрим создание продукта  example.conference
  • 25. __init__.py  from zope.i18nmessageid import MessageFactory  _ = MessageFactory("example.conference")  Фабрика сообщений инкапсулирует обработку строковых значений в продукте, в частности согласование перевода
  • 26. Presenter type, presenter.py from five import grok from zope import schema from plone.directives import form, dexterity from plone.app.textfield import RichText from plone.namedfile.field import NamedImage from example.conference import _
  • 27. class IPresenter(form.Schema): """A conference presenter. Presenters can be added anywhere. """ title = schema.TextLine( title=_(u"Name"), ) description = schema.Text( title=_(u"A short summary"), ) bio = RichText( title=_(u"Bio"), required=False ) picture = NamedImage( title=_(u"Picture"), description=_(u"Please upload an image"), required=False, )
  • 28. Program type, program.py from five import grok from zope import schema from plone.directives import form, dexterity from plone.app.textfield import RichText from example.conference import _ class
  • 29. IProgram(form.Schema): """A conference program. Programs can contain Sessions. """ title = schema.TextLine( title=_(u"Program name"), ) description = schema.Text( title=_(u"Program summary"), ) start = schema.Datetime( title=_(u"Start date"), required=False, ) end = schema.Datetime( title=_(u"End date"), required=False, ) details = RichText( title=_(u"Details"), description=_(u"Details about the program"), required=False)
  • 30. session.py Session type from five import grok from zope import schema from plone.directives import form, dexterity from plone.app.textfield import RichText
  • 31. class ISession(form.Schema): """A conference session. Sessions are managed inside Programs. ""“ title = schema.TextLine( title=_(u"Title"), description=_(u"Session title"), ) description = schema.Text( title=_(u"Session summary"), ) details = RichText( title=_(u"Session details"), required=False )
  • 32. Factory Type Information регистрация в profiles/default/types.xml <object name="portal_types"> <object name="example.conference.presenter" meta_type="Dexterity FTI" /> <object name="example.conference.program" meta_type="Dexterity FTI" /> <object name="example.conference.session" meta_type="Dexterity FTI" /> </object>
  • 33.  Для каждого типа создается XML файл в profiles/default/types  example.conference.presenter.xml  example.conference.program.xml  example.conference.session.xml
  • 34. Presenter type <?xml version="1.0"?> <object name="example.conference.presenter" meta_type="Dexterity FTI" i18n:domain="example.conference" xmlns:i18n="http://xml.zope.org/namespaces/i1 8n"> <!-- Basic metadata --> <property name="title" i18n:translate="">Presenter</property> <property name="description" i18n:translate="">A person presenting sessions</property>
  • 35. <property name="content_icon">user.gif</property> <property name="allow_discussion">True</property> <property name="global_allow">True</property> <property name="filter_content_types">True</property> <property name="allowed_content_types" /> <!-- schema interface --> <property name="schema">example.conference.presenter.Ipresenter </property> <!-- class used for content items --> <property name="klass">plone.dexterity.content.Item </property> <!-- add permission --> <property name="add_permission">cmf.AddPortalContent</property>
  • 36. <!-- enabled behaviors --> <property name="behaviors"> <element value="plone.app.content.interfaces.INameFromTitle" /> </property> <!-- View information --> <property name="default_view">view</property> <property name="default_view_fallback">False</property> <property name="view_methods"> <element value="view"/> </property>
  • 37. <!-- Method aliases --> <alias from="(Default)" to="(dynamic view)"/> <alias from="edit" to="@@edit"/> <alias from="sharing" to="@@sharing"/> <alias from="view" to="(selected layout)"/> <!-- Actions --> <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>
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 49.  В Dexterity FTI мы можем определять схему типа тремя способами:  schema: через имя интерфейса.  model_source: XML строка, представляющая тип. Генерируется и сохраняется черезTTW редактор.  model_file: путь к XML файлу, представляющему тип
  • 50. Экспорт профиля и схемы  Произвести экспорт профиля и экспорт типа - "Export Schema Profiles" и “Export Scheme Models” в панели управления
  • 51. Результат экспорта После экспорта имеем два одноименных файла presenter.xml В одном из них схема в другом ( в папке types )– регистрация типа
  • 52. 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>
  • 53. Перенос модели в файл  поместить полученный файл types.xml и папку types в папку профиля (profile) продукта  Очистить свойство model_source property  установить свойство a model_file: <property name="model_file">путь к файлу модели</property>  Например shuttlethread.farmyard.models:animal.xml
  • 54. часть 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>
  • 55.  Модуль plone.supermodel позволяет добавлять в XML schema набор полей, также как с использованием интерфейсов  Схема может быть именованной или нет  Именованная схема добавляет на форме соответствующую вкладку  Обычно имеют дело с единственной неименованной схемой в файле
  • 56. Именованная схема <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>