четверг, 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

Всероссийский конкурс  научно-технологических проектов страница конкурса https://dm-centre.ru/sirius-konkurs-projectov Цель конкурс...