0

我正在尝试使用 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>

等等,等等所有标签...

4

2 回答 2

1

Plone 中的全局选项卡是导航根。您可以通过两种方式检测当前活动的导航根:

  • body 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)"
    

    之后,您必须测试state-bodyClass 值中是否存在某个字符串。

  • 通过直接从@@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。检测准确的导航通常不是最佳选择。

于 2012-08-16T06:22:50.413 回答
0

这种效果通常被称为“megamenu”。有一个产品可以为 Plone 实现这一点,http ://plone.org/products/collective.collage.megamenu/ 。我没有使用过它,但我当然建议您将其作为起点进行探索。

于 2012-08-16T18:19:18.253 回答