私の質問はとても簡単です。
Plone 4(4.2)では、ナビゲーションツリーに表示されるデフォルトのビュー(たとえば、単純なページ)を作成するために設定する必要があるもの。
ナビゲーションツリーは、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>
これはテストされていないという警告がありますが、機能するはずです。
フォルダにリンクを作成し、宛先を「./idOfPage1」に設定して、リンクをフォルダのデフォルトビューとして設定することもできます。
編集権のないユーザーはPage1にリダイレクトされ、ページ自体がナビゲーションポートレットに表示されます。