воскресенье, 5 июня 2011 г.

Генерация темы и NameMapper

При генерации темы Plone  с использованием встроенного paster  появляется сообщение;
"You don't have the C version of NameMapper installed! I'm disabling Cheetah's useStackFrames option as it is painfully slow with the Python version of NameMapper. You should get a copy of Cheetah with the compiled C version of NameMapper."
Для получить скомпилированную версию NameMapper можно с http://www.cheetahtemplate.org/download.html . Для Plone 3 нужен файл _namemapper.pyd2.4 . Переименоваваем его в _namemapper.pyd  и помещаем в папку Plone/Python.
Для Plone 4 нужно установить Cheetah в установленный в систему Python 2.6 (дистрибутив по указанному выше адресу) и скопировать соответствующий файл из папаки C:\Python26\Lib\site-packages\Cheetah.

пятница, 3 июня 2011 г.

Plone 4 и debug-mode

Иногда в  Windows при запуске Plone 4  в режиме отладки с помощью команды  bin\plonectl fg  появляется  сообщение "To run the program in the foreground, please stop it first. ", но посмотр служб показывает  что Zope Instance не запущен. Для решения  этой проблемы в папке Plone\var  нужно удалить файлы instance.pid и  instance.lock, которые появляются там в результате не корректной остановки сервера.

суббота, 28 мая 2011 г.

анонимный пользователь с ролью Manager

Иногда нужно чтобы анонимный пользователь мог выполнять 
действия с ролью Manager.
 В случае использования Python Scripts такая возможность 
реализуется  использованием proxy- роли. Для метода класса
вида это может быть выполнено следующим образом:
  
from AccessControl.SecurityManagement  
import newSecurityManager, noSecurityManager
...

user = self.context.getWrappedOwner()
newSecurityManager(self.request, user)

self.doProtectedMethod()

noSecurityManager()
 
В результате выполнения кода создается временный 
пользователь с правами администратора. Созание такого
пользователя внутри метода класса позволяет анонимному
пользователю (при наличии соответствующих 
методов и интерфейса доступа) действовать как
 администратор.

Использование MinGW для компиляции в Plone

Для использования MinGW в Plone необходимо в каталоге \python\Lib\distutils каталога Plone создать текстовый файл distutils.cfg со следующим содержимым:
 [build]
compiler=mingw32

пятница, 4 февраля 2011 г.

О использовании reference_catalog

 # Общая часть
from Products.PythonScripts.standard import html_quote
from Products.CMFCore.utils import getToolByName
request = container.REQUEST
RESPONSE =  request.RESPONSE
urltool = getToolByName(context, "portal_url")
portal = urltool.getPortalObject()
catalogtool = getToolByName(context, "portal_catalog")
lcurses = [i.getObject() for i in catalogtool.searchResults(portal_type = 'Tema')]
refCatalog = getToolByName(portal, 'reference_catalog')
uid_catalog=getToolByName(portal, 'uid_catalog')
#Пример 1
for item in lcurses:
    refs = refCatalog.getReferences(item, 'content_source')
    print item.title_or_id()+'********************'
    for i in refs:
        print i.targetUID, i.sourceUID, i.relationship
        print uid_catalog(UID=i.targetUID), uid_catalog(UID=i.sourceUID)
        a=[k.getObject().getId() for k in uid_catalog(UID=i.targetUID)][0]
        b=[k.getObject().getId() for k in uid_catalog(UID=i.sourceUID)][0]
        print a, b
    print "##############################"
#Пример 2
    for i in refs:
        print i.targetUID, i.sourceUID, i.relationship
        print refCatalog.lookupObject(i.targetUID), refCatalog.lookupObject(i.sourceUID)
        a=refCatalog.lookupObject(i.targetUID)
        b=refCatalog.lookupObject(i.sourceUID)
        print a.getId(), b.getId()

return printed

каталог 'reference_catalog' возвращает объекты со свойствами:
 sourceUID -UID объекта -источника  связи
 targetUID  -UID связанного объекта,
 relation - имя связи
метод getReferences(sourceUID, relation, targetUID) позволяет получать поднаборы связей,  настраивая параметры метода.
Поскольку возвращаться  будут UID объектов, то для получения Id нужно использовать или каталог 'uid_catalog' (1 пример), или сам каталог 'reference_catalog'(2 пример). В примере приведен код для объектов типа Thema и LearnObject, связанных между собой связью 'content_source'.
Если у объекта есть поле типа
    ReferenceField(
        name='source',
        widget=ReferenceBrowserWidget(
            label='Source',
            label_msgid='LearnCurse_label_source',
            i18n_domain='LearnCurse',
        ),
        allowed_types=('LearnObject','Document','File'),
        multiValued=1,
        relationship='content_source',
    ),
то список  связанных этим отношением объектов можно получить как self.getИмя_поля. В данном примере self.getSource() - если в классе, или context.getSource() в классе вида и в виде.

Еще ссылки

 О разработке видов к продуктам Plone
http://plone.org/documentation/manual/theme-reference/buildingblocks/skin/templates/how-to-customise-view-or-edit-on-archetypes-content-items/
http://plone.org/documentation/manual/theme-reference/buildingblocks/skin/templates/customizing-at-templates/referencemanual-all-pages
http://plone.org/documentation/manual/theme-reference/buildingblocks/skin/templates/getting-started
https://weblion.psu.edu/trac/weblion/wiki/ViewTemplates
http://plone.org/documentation/manual/developer-manual/archetypes/appendix-practicals/b-org-creating-content-types-the-plone-2.5-way/zope-3-views
http://plone.org/documentation/kb/customization-for-developers/tutorial-all-pages
http://www.pererikstrandberg.se/blog/index.cgi?page=PloneArchetypesViewTemplateModifications
http://plone.org/documentation/kb/where-is-what/tutorial-all-pages

Ссылки изучающим Plone

Некоторые полезные ссылки
Про TAL
http://plone.org.ru/docs/howto/ZPT
http://plone.org.ru/docs/howto/AdvancedZPT
http://wiki.zope.org/ZPT/TALSpecification14
http://wiki.zope.org/zope2/PageTemplates

Русскоязычные
http://plone.org.ru/books/pb/ru/
http://wiki.python.su/%D0%9A%D0%BD%D0%B8%D0%B3%D0%B8/TheDefinitiveGuideToPlone
http://62.152.35.6:15006/Plone
http://62.152.35.6:15006/Plone/docs/manual
http://python.su/
http://www.komtet.ru/info/plone

Общие руководства
http://learnplone.org/
http://plone.org/documentation/manual/plone-community-developer-documentation/
http://docs.zope.org/zope2/zope2book/index.html
http://docs.zope.org/zope2/zdgbook/index.html
http://plone.org/documentation/kb/manipulating-plone-objects-programmatically/tutorial-all-pages
https://weblion.psu.edu/trac/weblion/wiki

среда, 12 января 2011 г.

импорт из папки buildout-cache\eggs

Как из своего продукта подключить файлы из папки Plone\buildput-cache\eggs ?
 Все пакеты egg установленные через buildout или через setup  доступны по своим  именам.
from archetypes.schemaextender.field import ExtensionField - импорт класса из ядра archetypes.schemaextender в buildout-cache\eggs.
from Products.FacultyStaffDirectory.interfaces.person import IPerson  - импорт либо из ядра products.facultystaffdirectory.egg, либо из одноименного продукта расположенного в папке products
Вне зависимости от способа установки все пакеты и классы находятся в одном пространстве имен

Вопросы к экзамену по Web

Вопросы к экзамену по Web