我想渲染一个对象的视图来代替另一个对象,然后将规范路径保持为最初遍历的路径,因此面包屑和对象制表符等仍然都是相同的。
我知道如何渲染另一个对象来代替规范对象,但除非我可能在“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使用的规范对象最初被遍历,以便适当地应用面包屑,对象选项卡等?
答案 0 :(得分:3)
我担心你想要的是一项不可能完成的任务;您正在为新上下文呈现完整的chrome,因此将使用该上下文呈现所有内容。你必须重做一切;面包屑,操作,portlet,任何其他上下文相关的viewlet。
我不确定您的用例是什么,您必须支持任意对象的所有可能布局,您可能需要在此重新考虑您的选项。
如果您没有需要所有可能布局的用例,那么您只需为规范对象创建一个自定义视图,该视图只是为其他对象重新呈现内容。例如,许多内容视图已包含您可以重复使用的宏。请查看skins/plone_content/folder_full_view_item.pt
以获取重用此类宏的示例模板,以呈现folder_full_view
模板的文件夹中的项目。
答案 1 :(得分:1)
bda.contentproxy是一个产品,但是要注意 ...是一项非常复杂的任务,背后充满了问题