Plone set handler-在sethandler中,如何在Plonesite的根目录下以编程方式添加/创建文件夹内容类型?

时间:2014-09-04 14:52:59

标签: plone

我已经制作了一个名为supplier_folder的文件夹内容类型,它显示了可以在其下添加的供应商列表及其信息。我可以通过导航栏添加它,但我想在安装过程中以编程方式添加它。

我一直在关注自定义安装程序代码(http://docs.plone.org/develop/addons/components/genericsetup.html#custom-installer-code-setuphandlers-py)的教程,并已着手以编程方式创建对象(http://docs.plone.org/develop/plone/content/creating.html)。

不幸的是,第二篇文章说我需要创建一个文件夹。如何解决此问题并在文件夹外的Plone站点添加supplier_folder对象?

3 个答案:

答案 0 :(得分:1)

当您创建新的Plone网站时,它还会创建一些默认内容类型。

看看Plone如何做:https://github.com/plone/Products.CMFPlone/blob/1471828ee97a8dd84396bad4a3286be514819869/Products/CMFPlone/setuphandlers.py#L119

答案 1 :(得分:1)

IIRC,只有具有经理网站管理员的用户才能向网站的根目录添加内容;你可以通过两种方式克服这个限制:

  1. 在创建项目时使用_constructInstance方法作为bypasses the permissions
  2. switching roles inside your codeplone.api.env.adopt_roles
  3. 我个人更喜欢第二种。

    您可以在interlegis.portalmodelo.policy包中看到相当复杂的setuphandlers.py的示例。

答案 2 :(得分:1)

有几种方法可以实现这一目标。构建机制是将GenericSetup与"结构"结合使用。此处描述的文件夹:http://koansys.com/tech/create-plone-initial-content-with-generic-setup

简而言之,您需要以下内容:

  1. 创建一个文件夹"结构"在您的通用设置配置文件中(通常,在配置文件/默认情况下)
  2. 使用以下内容创建.objects文件:"供应商,supplier_folder"
  3. "结构"创建一个文件夹"供应商"使用.properties文件和内容:

    [DEFAULT]
    title = Suppliers
    description = Some usefull description text
    
  4. 据我所知,这对于喜欢你的简单结构来说是可以的。如果你有复杂的文件夹和子文件夹结构,并想要更具体的控制,你可能需要编写python代码。我在这里做了一些事情:https://github.com/collective/zettwerk.setup/blob/master/zettwerk/setup/structure.py

    但zettwerk.setup尚未发布,但您应该能够将structure.py集成到您的项目中。你可以把handle_structure方法放到你的setuphandlers.py中并传递一个像这样的结构dict:

    handle_structure(portal, [{'id': 'suppliers', 'portal_type': 'supplier_folder'}])
    

    此方法的优点是,您还可以控制工作流状态,默认页面设置,portlet,本地角色和其他一些元数据。