0

私の質問はとても簡単です。

Plone 4(4.2)では、ナビゲーションツリーに表示されるデフォルトのビュー(たとえば、単純なページ)を作成するために設定する必要があるもの。

デフォルトのビューを表示しません

4

2 に答える 2

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て、このビルダーを「アクティブ化」する必要があります。

<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>

これはテストされていないという警告がありますが、機能するはずです。

于 2012-12-03T22:02:39.667 に答える
0

フォルダにリンクを作成し、宛先を「./idOfPage1」に設定して、リンクをフォルダのデフォルトビューとして設定することもできます。

編集権のないユーザーはPage1にリダイレクトされ、ページ自体がナビゲーションポートレットに表示されます。

于 2012-12-04T09:59:43.293 に答える