我通过以下方式隐藏了普通Plone首页的各种元素:
.section-front-page #portal-globalnav {
display: none;
}
现在,我想在页脚附近的底部添加一个globalnav。我考虑过各种方法:
最好的方法是什么?
答案 0 :(得分:7)
在Plone 4及更高版本中,您可以将globalnav viewlet注册为内容提供者:
<adapter
name="globalnav"
for="*
zope.publisher.interfaces.browser.IDefaultBrowserLayer
*"
factory="plone.app.layout.viewlets.common.GlobalSectionsViewlet"
provides="zope.contentprovider.interfaces.IContentProvider"
/>
然后使用以下命令将其包含在您的主页模板或main_template中
<tal:block tal:replace="structure provider:globalnav"/>
答案 1 :(得分:3)
首页上唯一的位是棘手的部分。您可以使用您的GS配置文件使用特殊的一次性界面标记首页,然后使用ZCML为该上下文的plone.global_sections
管理器注册IPortalFooter
视图,并且只注册该上下文:
<browser:viewlet
name="plone.global_sections"
for="my.special.IFrontPage"
manager="plone.app.layout.viewlets.interfaces.IPortalFooter"
class="plone.app.layout.viewlets.common.GlobalSectionsViewlet"
permission="zope2.View"
/>
您也可以使用它来为plone.global_sections
注册虚拟的空IPortalHead
视图,而不是使用display: none;
<browser:viewlet
name="plone.global_sections"
for="my.special.IFrontPage"
manager="plone.app.layout.viewlets.interfaces.IPortalHeader"
class="my.special.EmptyViewlet"
permission="zope2.View"
/>
答案 2 :(得分:2)
我喜欢这两个建议,但我最终做了以下事情(因为我无法看到如何用其他建议做我想做的一切):
<browser:viewlet
name="trueblade.phoenix.footer2"
manager="plone.app.layout.viewlets.interfaces.IPortalFooter"
class=".footer2.MyGlobalSectionsViewlet"
template="footer2.pt"
permission="zope2.View"
/>
像这样的footer2.py(对于子类,没有别的):
from plone.app.layout.viewlets.common import GlobalSectionsViewlet
class MyGlobalSectionsViewlet(GlobalSectionsViewlet):
pass
并且像这样的footer2.pt(一切都相同,但CSS ID):
<tal:sections tal:define="portal_tabs view/portal_tabs"
tal:condition="portal_tabs"
i18n:domain="plone">
<h5 class="hiddenStructure" i18n:translate="heading_sections">Sections</h5>
<ul id="footer2"
tal:define="selected_tab python:view.selected_portal_tab"
><tal:tabs tal:repeat="tab portal_tabs"
><li tal:define="tid tab/id"
tal:attributes="id string:portaltab-${tid};
class python:selected_tab==tid and 'selected' or 'plain'"
><a href=""
tal:content="tab/name"
tal:attributes="href tab/url;
title tab/description|nothing;">
Tab Name
</a></li></tal:tabs></ul>
</tal:sections>
这样的CSS(仅在首页显示footer2):
#footer2 {
display: none;
}
.section-front-page #footer2 {
display: block;
margin: 1em;
}
当然,还是footer2的默认页脚样式的副本:
#footer2 {
clear: both;
font-size: 80%;
background: #ddd;
/* ensure top navigation dont touches portlets, content etc.. #10491 */
margin: 0 0 1em 0;
text-align: center;
}
#footer2 li {
}
#footer2 li a {
display: inline-block;
padding: 0.5em 1em 2em 1em;
background: #ddd;
min-width: 6em;
white-space: normal;
/*TODO: Once we have removed the whitespace from the nav template, this can be put back*/
/*border-bottom: 0.1em solid White;*/
border-right: 0.1em solid white;
}
#footer2 .selected a,
#footer2 a:hover {
background: #205c90;
color: White;
}
#footer2 .selected a:hover {
background: #ddd;
color: #205c90;
}
答案 3 :(得分:1)
通过不使用Viewlet而不是portlet,可以节省大量时间和非侵入性方法。
Products.ContentWellPortlets允许您在内容的上方和下方放置portlet。
我写了一个插件,它正在解决这个问题:adi.dropdownmenu。您可以使用它,在内容上方取消分配“扩展导航”-portlet(由collective.portlet.sitemap提供)并在内容下方指定一个,将target-depth设置为1,就是这样。