Plone 如何在注销后隐藏导航portlet?
如何在注销后隐藏导航portlet?我真正想要的是,如果一个登录的管理员访问一个站点,导航portlet应该出现并对他可见,直到他从plone站点注销。但是,如果普通用户访问plone站点,portlet就不应该出现。plone的一个很好的特性是,它不仅可以将portlet分配给位置,还可以分配给contenttype和group。要解决您的请求,只需将portlet分配给组“Administrators” 为此,请转到Plonesite的控制面板,单击“用户和组”,单击绿色选项卡“组”,单击“管理员”,单击选项卡“组portlet”,添加portlet 要以编程的方式再现这一点,请使用Genericsetup(导出站点的portlets.xml并将相关部分包含在产品中)Plone 如何在注销后隐藏导航portlet?,plone,Plone,如何在注销后隐藏导航portlet?我真正想要的是,如果一个登录的管理员访问一个站点,导航portlet应该出现并对他可见,直到他从plone站点注销。但是,如果普通用户访问plone站点,portlet就不应该出现。plone的一个很好的特性是,它不仅可以将portlet分配给位置,还可以分配给contenttype和group。要解决您的请求,只需将portlet分配给组“Administrators” 为此,请转到Plonesite的控制面板,单击“用户和组”,单击绿色选项卡“组”,单击“
完整性:与将portlet分配给contenttype类似,您可以转到控制面板,单击“类型”,选择dropdownlist的所需类型(例如“事件”),然后单击“管理分配给此内容类型的portlet”,分配portlet。通过导出“类型”并将其包含到您的产品中,可进行程序复制。感谢大家对我的问题的回复。不幸的是,你们提供的解决方案不适合我。因此,我自己也这样做,以便在注销时隐藏一个导航portlet 步骤1:在overrides.zcml中
<plone:portlet
name="navigation_bar"
interface="plone.app.portlets.portlets.navigation.INavigationPortlet"
assignment="plone.app.portlets.portlets.navigation.Assignment"
renderer=".browser.navi_portlet.navigation_portlet"
addview="plone.app.portlets.portlets.navigation.AddForm"
editview="plone.app.portlets.portlets.navigation.EditForm"
/>
<plone:portletRenderer
portlet="plone.app.portlets.portlets.navigation.INavigationPortlet"
class=".browser.navi_portlet.navigation_portlet"
layer=".interfaces.IThemeSpecific"
/>
我在navi_portlet.py中所做的是,我刚刚从viewlets(鸡蛋文件夹)继承了PersonalBarViewlet,并从portlet(鸡蛋文件夹)继承了渲染器。覆盖默认行为以在注销时隐藏它
步骤3:nav_portlet.pt
<dl class="actionMenu deactivated" id="portlet portletNavigationTree"
tal:define="user_actions python:view.nav_up();root view/navigation_root"
tal:condition="python:view.user_actions and not view.anonymous">
<tal:block condition="not: view/anonymous">
<dt class="portletHeader"
tal:attributes="class python:view.hasName() and 'portletHeader' or 'portletHeader hiddenStructure'">
<span class="portletTopLeft"></span>
<a href="#"
class="tile"
tal:attributes="href string:${view/heading_link_target}"
tal:content="view/title"
i18n:translate="">Navigation</a>
<span class="portletTopRight"></span>
</dt>
<dd class="portletItem lastItem">
<ul class="navTree navTreeLevel0">
<li tal:define="selectedClass view/root_item_class;
li_class python:selectedClass and ' navTreeCurrentNode' or '';
normalizeString nocall:context/plone_utils/normalizeString;
section_title root/Title;
section python:normalizeString(section_title);"
tal:condition="view/include_top"
tal:attributes="class string:navTreeItem navTreeTopNode${li_class} section-${section}">
<div tal:define="rootIsPortal view/root_is_portal;
root_icon view/root_icon;
root_type root/portal_type;
root_type_class python:'contenttype-' + normalizeString(root_type);
root_class python:rootIsPortal and 'contenttype-plone-site' or root_type_class;">
<a tal:attributes="href root/absolute_url;
title root/Description;
class python:' '.join([root_class, selectedClass]).strip();">
<img tal:replace="structure root_icon/html_tag" tal:condition="not:rootIsPortal" />
<span tal:omit-tag=""
tal:condition="rootIsPortal"
i18n:translate="tabs_home">Home</span>
<span tal:condition="not:rootIsPortal"
tal:replace="root/Title">Root item title</span>
</a>
</div>
</li>
<li tal:replace="structure view/createNavTree">
SUBTREE
</li>
</ul>
<span class="portletBottomLeft"></span>
<span class="portletBottomRight"></span>
</dd>
-
-
子树
我在nav_portlet.pt中尝试的是合并portlet(使用Render(类)的导航portlet)和Viewlet(PersonalBarViewlet)。因此,我使用PersonalBarViewlet类中的user_action方法(i.etal:condition=“python:view.user_actions而不是view.anonymous”>)在注销时隐藏导航Portlet
希望你们都明白我的观点和我所做的
谢谢@@Ida:嗨,你能告诉我注销后隐藏导航portlet的确切步骤吗。我尝试了很多方法,但没有任何帮助。所以请清楚地告诉我该怎么做。@NirmalaSudhir:更新的答案,HTH。@@ida:嗨,你为我的问题提供的答案不起作用。我按你说的做了每件事到底什么不起作用?顺便说一句:@@ida不起作用,告诉我,语法是
@exactUsername
:您说过在注销时使用“控制面板”->“用户和组”隐藏导航portlet。我按照你告诉我的步骤做了,但它不起作用。但我仍然看到了导航portlet,当您注销时,如果您能够准确地描述哪些地方不起作用,那么您可以节省大量的工作。这个解决方案对于任务来说是一个不必要的过度负担,它已经是内置的、OOTB的、可点击的、Plone堆栈行为。顺便说一句:您的解决方案区分用户是否登录,但如果他/她是管理员,而其他条件看起来是,如果存在个人栏,您可能不需要个人栏,并且当您在其他上下文中使用portlet时,它可能会成为一个障碍。
<dl class="actionMenu deactivated" id="portlet portletNavigationTree"
tal:define="user_actions python:view.nav_up();root view/navigation_root"
tal:condition="python:view.user_actions and not view.anonymous">
<tal:block condition="not: view/anonymous">
<dt class="portletHeader"
tal:attributes="class python:view.hasName() and 'portletHeader' or 'portletHeader hiddenStructure'">
<span class="portletTopLeft"></span>
<a href="#"
class="tile"
tal:attributes="href string:${view/heading_link_target}"
tal:content="view/title"
i18n:translate="">Navigation</a>
<span class="portletTopRight"></span>
</dt>
<dd class="portletItem lastItem">
<ul class="navTree navTreeLevel0">
<li tal:define="selectedClass view/root_item_class;
li_class python:selectedClass and ' navTreeCurrentNode' or '';
normalizeString nocall:context/plone_utils/normalizeString;
section_title root/Title;
section python:normalizeString(section_title);"
tal:condition="view/include_top"
tal:attributes="class string:navTreeItem navTreeTopNode${li_class} section-${section}">
<div tal:define="rootIsPortal view/root_is_portal;
root_icon view/root_icon;
root_type root/portal_type;
root_type_class python:'contenttype-' + normalizeString(root_type);
root_class python:rootIsPortal and 'contenttype-plone-site' or root_type_class;">
<a tal:attributes="href root/absolute_url;
title root/Description;
class python:' '.join([root_class, selectedClass]).strip();">
<img tal:replace="structure root_icon/html_tag" tal:condition="not:rootIsPortal" />
<span tal:omit-tag=""
tal:condition="rootIsPortal"
i18n:translate="tabs_home">Home</span>
<span tal:condition="not:rootIsPortal"
tal:replace="root/Title">Root item title</span>
</a>
</div>
</li>
<li tal:replace="structure view/createNavTree">
SUBTREE
</li>
</ul>
<span class="portletBottomLeft"></span>
<span class="portletBottomRight"></span>
</dd>