我正在尝试为网站实现Plone的可重复部署,并使用buildout,基本上遵循Martin Aspeli的书 Professional Plone 4 Development 。我可以使用我的源产品<site>.policy
和<site>.theme
设置系统,并自动激活主题,但是当我运行buildout时,我仍然需要实例化Plone站点并激活策略产品,之后为网站创建标准对象。
可以在安装过程中检查是否存在内容对象(如Plone站点对象或特定文件夹),如果它们不存在且设置正确,是否可以创建它们?我可以在单独的<site>.content
产品中执行此操作,还是应该在<site>.policy
中处理?
答案 0 :(得分:6)
原则上,buildout可以做任何你可以编写的代码,只要你创建一个配方来为你做这件事。
幸运的是,有人已经创建了一个为您创建plone网站的方法,名为collective.recipe.plonesite
:
[buildout]
parts =
...
plonesite
[plonesite]
recipe = collective.recipe.plonesite
site-id = <site>
profiles-initial =
<site>.policy.profile-default
post-extras =
${buildout}/src/<site>.content/site/content/create_content.py
该配方提供了几个钩子,可以控制站点创建,在创建站点之前或之后执行系统命令,或者在运行GS配置文件之前或之后执行额外的python代码。
在上面的示例中post-extras
运行create_content.py
脚本,变量app
和site
设置为:
from Products.CMFPlone.utils import _createObjectByType
if 'someobject' not in site:
_createObjectByType('SomeType', site, 'someobject', title='Foo Bar')