这个问题是this question的重新制定,它以一种令人困惑的方式演变而来。如果您搜索一些详细信息或对解决方法和替代解决方案感兴趣,请参阅this question。
这个问题是关于folder_full_view_item.pt
中对模板folder_full_view.pt
的调用,而不是其他模板的调用!
请避免使用皮肤图层,editskinswitcher等变通方法。我不想在这里解决特定的用例。我想要的是真正了解这实际上是如何运作的。
我将这个问题分为三个部分:情景,结果,问题。
拥有包含文档的文件夹。文件夹的布局为folder_full_view
。文档的布局为document_view
:
Folder (layout=folder_full_view)
Document (layout=document_view)
模板folder_full_view.pt
通过folder_full_view_item.pt
调用模板item.getObject().folder_full_view_item()
。
folder_full_view_item.pt
document_view.pt
通过use-macro="item_macro"
(item_macro
类似here/document_view/macros/content-core
)来调用folder_full_view.pt :: item.getObject().folder_full_view_item()
folder_full_view_item.pt :: use-macro="here/document_view/macros/content-core"
document_view.pt
模板plone3_theme
。原理如下:
folder_full_view.pt
folder_full_view_item.pt
个模板document_view.pt
,configure.zcml
和 <browser:page
for="*"
name="folder_full_view_item"
template="folder_full_view_item.pt"
layer="example.theme.browser.interfaces.IThemeSpecific"
permission="zope2.View"
/>
<browser:page
for="Products.ATContentTypes.content.folder.ATFolder"
name="folder_full_view"
template="folder_full_view.pt"
layer="example.theme.browser.interfaces.IThemeSpecific"
permission="zope2.View"
/>
<browser:page
for="Products.ATContentTypes.content.document.ATDocument"
name="document_view"
template="document_view.pt"
layer="example.theme.browser.interfaces.IThemeSpecific"
permission="zope2.View"
/>
的覆盖版本。这些模板在folder_full_view.pt
。
folder_full_view_item.pt
安装主题后,结果如下:
文档和文件夹通过遍历获取模板(我猜)。 (子)模板虽然不经过遍历。
文件夹:使用覆盖 document_view.pt
,原始 document_view.pt
和原始 item.getObject().folder_full_view_item()
文档:使用覆盖 folder_full_view.pt
是folder_full_view_item.pt
没有通过遍历的情况吗?如果是,为什么?
可以修改(document_view.pt
!)以强制遍历覆盖{{1}}(!)并随后覆盖{{1}}?这可能吗?
再次,请避免使用皮肤图层,editskinswitcher等变通办法。我不想在这里解决特定的用例。我想要的是真正了解这实际上是如何运作的。