如何使用Generic Setup从列表类型资源注册表记录中删除元素

时间:2014-11-11 20:35:12

标签: plone genericsetup

在当前的Plone 5 coredev buildout中,我正在尝试为一个在cssregistry.xml中注册一些css的附加组件编写一个GenericSetup卸载配置文件。在Plone 5中,portal_css和portal_javascripts为空,所有这些资源现在都自动加载到资源注册表中。但是没有相应的卸载。如果我有一个css资源,我在资源注册表中获得以下记录:

  <record name="plone.resources/resource-myaddon-stylesheets.conf">...</record>
  <record name="plone.resources/resource-myaddon-stylesheets.css">...</record>
  <record name="plone.resources/resource-myaddon-stylesheets.deps">...</record>
  <record name="plone.resources/resource-myaddon-stylesheets.export">...</record>
  <record name="plone.resources/resource-myaddon-stylesheets.init">...</record>
  <record name="plone.resources/resource-myaddon-stylesheets.js">...</record>
  <record name="plone.resources/resource-myaddon-stylesheets.url">...</record>

(即使我没有js资源,我也得到了所有这些,除了css记录外,它们都有一个空值。)

此外,以下记录中还有一个新的<element>

<record name="plone.bundles/plone-legacy.resources" interface="Products.CMFPlone.interfaces.resources.IBundleRegistry" field="resources">

    ...

    <value>
      ...
      <element>resource-myaddon-stylesheets</element>
    </value>
</record>

在创建我的GS卸载配置文件时,它非常简单,可以删除registry.xml中的前7条记录。但是如何从后一条记录中删除单个<element>?我查看了plone.app.registry中的测试,但删除元素似乎没有被覆盖。

最终,如果卸载可以自动处理,就像安装一样,那就太好了。

2 个答案:

答案 0 :(得分:3)

似乎解决方法是将这样的内容添加到Extensions / Install.py:

def _removeBundleFromRegistry():
    logger.info('Removing bundle reference from registry')

    record = 'plone.bundles/plone-legacy.resources'
    resources = api.portal.get_registry_record(record)
    if u'resource-myaddon-stylesheets' in resources:
        resources.remove(u'resource-myaddon-stylesheets')

def uninstall(portal, reinstall=False):
    if not reinstall:
        ...
        _removeBundleFromRegistry()
        ...

太糟糕了。

答案 1 :(得分:1)

你必须使用这样的东西:

<record name="plone.bundles/plone-legacy.resources" interface="Products.CMFPlone.interfaces.resources.IBundleRegistry" field="resources">
  <value purge="false">
    <element remove="true">resource-myaddon-stylesheets</element>
  </value>
</record>

您可以在brasil.gov.paginadestaque包的卸载配置文件中看到一个有效的示例。