воскресенье, 19 декабря 2010 г.

paster и buildout

Инстанс Plone 3.3.5, установленный через buildout включает в себя команду "bin/paster" для создания расширений Plone.
Например, создание новой темы:
bin/zopeskel plone3_theme plonetheme.mythemeid

Создание пакета на основе Archetypes:
bin/zopeskel archetype mycompanyid.content
Более подробно:
http://collective-docs.plone.org/tutorials/paste.html

пятница, 17 декабря 2010 г.

Проверка полей формы

Для каждого поля схемы Archetypes может быть установлен набор валидаторов - обработчиков, отслеживающих  соответствие вводимых данных определенным критериям. Валидатор указывается  атрибутом validators в поле схемы
StringField('email',
                 required = 1,
                 validators = ('isEmail'),
              ),
Валидаторов   может быть несколько:
validators = ('isMaxSize', 'isTidyHtmlWithCleanup',)
 
Если значение, вводимое в поле не удовлетворяет условию валидации, в форму будет выведено сообщение об ошибке. О  существующих валидаторах и самостоятельном их создании смотри:
http://plone.org/documentation/manual/developer-manual/archetypes/fields/validator-reference 
http://www.pererikstrandberg.se/blog/index.cgi?page=PloneArchetypesFieldValidator 
 


 
 

Plone и Java Scripts

В Plone имеется набор Java Scripts, которые можно эффективно использовать в шаблонах.  Об их возможностях читать http://www.sixfeetup.com/blog/2009/7/31/utilize-available-javascript-in-plone-without-knowing-javascript

четверг, 16 декабря 2010 г.

Вкладки на форме контент-типа

Для добавления вкладки в базовый вид контент-типа достаточно в модели класса добавить метод и определить у него стереотпы, как на рисунке. При генерации Archgenxml  выдает сообщение "WARNING Deprecated usage of stereotype view or form!", но вкладку регистрирует.
Добавление вкладки можно сделать  вручную, добавив запись в файл имя_типа.xml в папке profiles/defaults/types.

Для модели на рисунке в файле Discipline.xml добавлена запись:

<action title="addTemsFromList" i18n:attributes="title" action_id="addTems" category="object" condition_expr="python:1" url_expr="string:${object_url}/addTems" visible="True">
  <permission value="View" />
  action>

виды и classic portlet

Вопрос: как подключить вид из нашего продукта в classic portlet?
Ответ: никак, classic  portlet предназначен для отображения кода HTML и использования Java Scripts.
Частично задачу представления вида в портлете можно решить установкой collective.portlet.tal, который позволяет вставлять код с инструкциями tal:
http://www.packtpub.com/article/creating-new-types-of-plone-portlets). 
Лучше создавать  специализированный портлет:
http://www.martinaspeli.net/articles/an-introduction-to-plone-portlets
https://www.packtpub.com/article/creating-customizing-assigning-portlets-automatically-for-plone-3.3 

Список групп пользователя

 Скрипт для получения списка групп, в которых зарегистрирован текущий пользователь.
request = container.REQUEST
RESPONSE =  request.RESPONSE
from Products.CMFCore.utils import getToolByName
membership_tool = getToolByName(context, 'portal_membership')
user=membership_tool.getAuthenticatedMember()
groups=user.getGroups()
for group in groups:
     print groups
return printed
Соответствующим образом меняя значение user можно получить подобный результат для всех пользователей.
Обращаю внимание, что проверять скрипт нужно под учетной записью, зарегистированной в Plone.

пятница, 10 декабря 2010 г.

Перенос скрипта Python в вид

В классе вида создайте метод и перенесите  туда код скрипта.
Создайте в классе вида  конструктор:
    def __init__(self, context, request):
        self.context=context
        self.request=request
  Во всех методах  для доступа к context и request  используйте self.context и   self.request соответственно.
Если нужно перенести скрипт, обрбатывающий форму, то создайте в классе метод __call__ и разместите код обработки там.
Вызов всех методов из шаблона производится как python:view.имя_метода(список параметров) или view/имя_метода.
В шаблоне формы  имя обработчика может быть установлено универсальным способомЖ
<form method="get"
tal:attributes="action string:${context/absolute_url}/${view/__name__}">
Пример разработки формы реализован в продукте CustomContent. размещенном на учебном сервере.

Получение списка пользователей

http://plone.org/documentation/manual/plone-community-developer-documentation/members/member-basics

вторник, 7 декабря 2010 г.

Отображение полей типа ImageField

Для того, чтобы поле типа ImageField отображалось в формах редактирования и просмотра объекта, нужно установить следующие  именованные значения для этого поля в UML-модели:
storage        AttributeStorage()
original_size  python:(600,600)
sizes            python:{'small':(100,100),'medium':(200,200),'large':(600,600)},

Атрибут original_size определяет  размер, в который будет преобразовано  исходное  изображение, если его размер превышает 'large'. 


Замечание к использованию Archgenxml

При разработке модели и генерации продукта Plone с помощью Archgenxml следите за одинаковым  именованием  модели в ArgoUML, файла хранении модели и папки генерируемого продукта. Эти имена  чуствительны к регистру и  нарушениие правила сквозного именования  может  привести к трудно определяемой ошибке.

Использование buildout

После установки Plone все задачи по изменению конфигурации и установка новых продуктов выполняются  через изменение  соответствующих записей в buildout.cfg и последующем выполнении команды bin\buildout -v.  Указание ключа -v позволяет просматривать лог выполнения в консоле.
Для возможности отладки установите в соответствующей строчке buildout.cfg значение debug-mode = off на debug-mode = on.
Запуск сервера:
 в отладочном режиме bin\instance fg
 в обычном режиме bin\instance start
Остановка сервера: bin\instance stop
Перезапуск сервера: bin\instance restart
Все команды набираются в консоле из корневой папки инстанса . Так, если Plone установлен в C:\Plone 3.3.5, то запуск производится именно из этой папки.
Для любителей мышки: не запускайте buildout.exe  и  instance.exe мышкой из окна "проводника" или каким-либо другим способом - консоль ваш друг, в крайнем случае - опция "Выполнить" из меню "Пуск".

среда, 1 декабря 2010 г.

Наследование от архетипов

Создать наследуемый от архетипов класс можно двумя способами.

1. Классический
 Создаем класс ATNewsItem со стереотипами archetype и stub и наследуем от него.
Устанавливаем величину именованнго значения import_from, присвоив значение Products.ATContentTypes.content.newsitem, что указывает на модуль с классом -архетипом. На этм все. Способ устаревший, но иногда (когда не срабатывает способ 2) используется.
2. Для Plone 3
Создаем свой класс и  устанавливаем ему стереотип соответствующий нужному архетипу, в данном примере atnewsitem.    

Лабиринт и разработка игр

 Лабиринт Алгоритм поиска пути в лабиринте и его реализация на Python 3.4 Задача на создание программы для виртуального робота, способно...