2012-12-03 41 views
0

我的問題默認視圖是很簡單....的Plone:示對導航樹

在Plone 4(4.2),我需要設置,以使默認視圖,例如一個簡單的頁面,被顯示在導航樹。

doesn't show default view

回答

0

您也可以在文件夾中創建一個鏈接,將目標設置爲'./idOfPage1'並將該鏈接設置爲文件夾的默認視圖。

沒有編輯權限的用戶將被重定向到Page1,然後頁面本身將顯示在導航欄中。

+0

非常棘手,但有效! – R063R

1

導航樹使用INavigationQueryBuilder部件找到示出的所有元件。默認實現會過濾掉任何用作默認頁面的內容。

您必須提供您自己的實施;但您可以重新使用原始實現。你所要做的只是改變生成的查詢,通常,如果不存在更具體的查詢,則使用is_default_page索引來過濾默認頁面。但是,如果您的已更改查詢添加了該索引的搜索,則它不會嘗試添加更具體的過濾器。將其設置爲搜索(True, False)意味着它將返回默認頁面和非默認頁面,從而有效地中和過濾器。

執行就變成了:

from plone.app.portlets.portlets.navigation import QueryBuilder, INavigationPortlet 
from zope.component import adapts 
from zope.interface import implements, Interface 


class INonDefaultPageFilteringNavigationPortlet(INavigationPortlet): 
    pass 


class DontFilterDefaultQueryBuilder(QueryBuilder): 
    implements(INavigationQueryBuilder) 
    adapts(Interface, INavigationPortlet) 

    def __init__(self, context, portlet): 
     super(DontFilterDefaultQueryBuilder, self).__init__(context, portlet) 
     self.query['is_default_page'] = (True, False) # Don't filter out default pages 

你必須註冊這個作爲一個適配器,添加INonDefaultPageFilteringNavigationPortlet到您的portlet '激活' 這建設者:

<configure 
    xmlns="http://namespaces.zope.org/zope" 
    xmlns:five="http://namespaces.zope.org/five"> 

<adapter factory=".yourmodule.DontFilterDefaultQueryBuilder" /> 

<five:implements 
    class="plone.app.portlets.portlets.navigation.Assignment" 
    interface=".yourmodule.INonDefaultPageFilteringNavigationPortlet" /> 

</configure> 

所有與警告,這是未經測試的,但它應該工作。

+0

謝謝,它幫了很多! – R063R