在当前的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中的测试,但删除元素似乎没有被覆盖。
最终,如果卸载可以自动处理,就像安装一样,那就太好了。
答案 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包的卸载配置文件中看到一个有效的示例。