在当前的 Plone 5 coredev 构建中,我正在尝试为在 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 中的测试,但似乎没有涵盖删除元素。
最终,如果卸载可以像安装一样自动处理,那就太好了。
最佳答案
似乎解决方法是将类似这样的内容添加到 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()
...
太糟糕了。
关于plone - 如何使用通用设置从列表类型资源注册表记录中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26874044/