我正在尝试使用getText基于每个全局选项卡(每个选项卡将加载不同的html页面)加载不同的html页面。有没有人知道为每个不同的文本指定某个选项卡的代码?下面的代码将相同的文本加载到所有选项卡中:
<div class="col_3" metal:define-macro="highlights" i18n:domain="plone">
<h2>Highlights</h2>
<p>
<tal:block tal:condition= "exists:here/graduate-study/highlghts-grad"
tal:replace="structure here/graduate-study/highlghts-grad/getText">Footer content here</tal:block>
</p>
</div>
<div class="col_3" metal:define-macro="highlights" i18n:domain="plone">
<h2>Highlights</h2>
<p>
<tal:block tal:condition= "exists:here/undergraduate-study/highlghts-grad"
tal:replace="structure here/undergraduate-study/highlghts-grad/getText">Footer content here</tal:block>
</p>
</div>
所有标签的等等......
答案 0 :(得分:1)
Plone中的全局标签是导航根。您可以通过两种方式检测当前活动导航根目录:
正文HTML标记有一个section-[id_of_section]
CSS类,其中id_of_section
因每个部分的路径名而异。
从Viewlet或portlet中,您可以使用@@plone_layout
视图检索这些类:
tal:define="plone_layout context/@@plone_layout;
bodyClass python:plone_layout.bodyClass(template, view)"
之后你必须测试bodyClass值中是否存在某个state-
字符串。
直接从@@plone_portal_state
视图中检索当前导航根:
tal:define="plone_portal_state context/@@plone_portal_state;
nav_root plone_portal_state/navigation_root;
nav_root_id nav_root/getId"
然后,您可以根据nav_root_id
更改您的Viewlet或portlet。
但是请注意,每个导航根都有一个门户类型,可能还有一个接口声明,可用于注册Viewlet或portlet。检测确切的导航通常不是最好的选择。
答案 1 :(得分:0)
这种效应通常被称为“megamenu”。有一个产品为Plone http://plone.org/products/collective.collage.megamenu/实现了这个功能。我没有用它,但我肯定会建议你把它作为一个起点。