在Plone中覆盖规范对象

时间:2011-04-21 01:04:40

标签: plone

我想渲染一个对象的视图来代替另一个对象,然后将规范路径保持为最初遍历的路径,因此面包屑和对象制表符等仍然都是相同的。

我知道如何渲染另一个对象来代替规范对象,但除非我可能在“plone_context_state”浏览器视图中覆盖“canonical_object”方法,否则几乎不可能覆盖用于规范对象的内容。 / p>

以下是我使用调用方法呈现其他对象的代码:

item = aq_base(default_item).__of__(self.context)
layout = item.getLayout() or item.getDefaultLayout()
try:
    return aq_acquire(item, layout)(*args, **kwargs)
except AttributeError:
    try:
        return getMultiAdapter((item, self.request), name=layout)(*args, **kwargs)
    except: pass

return super(DefaultItemEnabledView, self).__call__(*args, **kwargs)

现在,是否有可能使plone使用的规范对象最初被遍历,以便适当地应用面包屑,对象选项卡等?

2 个答案:

答案 0 :(得分:3)

我担心你想要的是一项不可能完成的任务;您正在为新上下文呈现完整的chrome,因此将使用该上下文呈现所有内容。你必须重做一切;面包屑,操作,portlet,任何其他上下文相关的viewlet。

我不确定您的用例是什么,您必须支持任意对象的所有可能布局,您可能需要在此重新考虑您的选项。

如果您没有需要所有可能布局的用例,那么您只需为规范对象创建一个自定义视图,该视图只是为其他对象重新呈现内容。例如,许多内容视图已包含您可以重复使用的宏。请查看skins/plone_content/folder_full_view_item.pt以获取重用此类宏的示例模板,以呈现folder_full_view模板的文件夹中的项目。

答案 1 :(得分:1)

bda.contentproxy是一个产品,但是要注意 ...是一项非常复杂的任务,背后充满了问题