4

注销后如何隐藏导航portlet?我真正想要的是,如果登录的管理员访问一个站点,导航 portlet 应该出现并且对他可见,直到他从 plone 站点注销。但是,如果普通用户访问 plone 站点,则该 portlet 不应该出现。

4

2 回答 2

10

Plone 的一个很好的特性是不仅可以将 portlet 分配给位置,还可以分配给内容类型和组。要解决您的请求,只需将 portlet 分配给组 'Administrators'。

为此,请转到 Plonesite 的控制面板,单击“用户和组”,单击绿色选项卡“组”,单击“管理员”,单击“组 portlet”选项卡,添加一个 portlet。

要以编程方式重现此内容,请使用 Genericsetup(导出站点的 portlets.xml 并将相关部分包含在您的产品中)。

为了完整性:类似于将 portlet 分配给内容类型,您转到控制面板,单击“类型”,选择下拉列表的所需类型(fe“事件”),然后单击“管理分配给此内容类型的 portlet”,分配 portlet . 通过导出“类型”并将其包含到您的产品中,以编程方式可重现。

于 2013-09-14T16:12:52.027 回答
0

谢谢大家,对我的问题的所有回应。不幸的是,你们提供的解决方案对我不起作用。所以我自己确实喜欢这样在注销时隐藏导航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"
     />  

renderer=".browser.navi_portlet.navigation_portlet" 这里浏览器是我的文件夹,其中包含一个名为 navi_portlet 的文件,其方法为 navigation_portlet。

第 2 步:navi_portlet.py:

 from Products.Five.browser import BrowserView
 from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
 from Products.CMFPlone import PloneMessageFactory as _
 from plone.app.portlets.portlets.navigation import Renderer
 from plone.app.layout.viewlets.common import PersonalBarViewlet
 from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
 from plone.app.layout.globals.interfaces import IViewView

 class navigation_portlet(Renderer,PersonalBarViewlet):

    _template= ViewPageTemplateFile('templates/nav_portlet.pt')

    def nav_up(self):
        mytal = PersonalBarViewlet.update(self)

我在 navi_portlet.py 中所做的只是从 viewlets(eggs 文件夹)继承了 PersonalBarViewlet,从 portlets(eggs 文件夹)继承了 Renderer。覆盖默认行为以在注销时将其隐藏。

第 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)和 viewlets(PersonalBarViewlet)。所以我使用 PersonalBarViewlet 类中的 user_action 方法(i.etal:condition="python:view.user_actions 而不是 view.anonymous">)在注销时隐藏导航 Portlet。

希望你们都明白我的观点和我的所作所为。

谢谢

于 2013-10-08T11:17:28.243 回答