[5]動的ビュー
CMFDynamicViewFTIを使って、「表示」メニューを使用します。
Plone2.1には「表示」メニューが追加されています。これは、インスタンスごとにオブジェクトの表示ページを設定するために使用します。RichDocumentはこの機能を次の二つの方法で使用します。
- RichDocumentをフォルダのデフォルトページとして使用できることをPloneに通知します。つまり、ユーザはフォルダに移動して、「デフォルトビューのアイテムを選択」を選択して、RichDOcumentをそのフォルダの表示に指定できます。
- ユーザがRichDocumentの表示方法(オリジナルのドキュメントの表示形式や最初の画像の表示、サムネイル表示など)を変更するために、別のレイアウトを選択できるようになります。サードパーティ製のプロダクトや管理者がビューを追加することもできます。
利用できるデフォルトページタイプにRichDocumentをPloneに簡単に追加できます。Extensions/Install.pyで、RichDocumentをportal_properties/site_propertiesのdefault_page_typesのリストに追加するだけです。
# Add to default_page_types
defaultPageTypes = list(siteProperties.getProperty('default_page_types'))
if 'RichDocument' not in defaultPageTypes:
defaultPageTypes.append('RichDocument')
siteProperties.manage_changeProperties(default_page_types = defaultPageTypes)
RichDocumentを「表示」メニュー、それ自体で使用できるようにすると、さらに面白いでしょう。CMFDynamicViewFTIに魔法が隠されています。これは、標準のCMFのファクトリタイプ情報クラスを拡張して、別のビューメソッドを定義できるようにします。
portal_typesをみると、青と黄色のアイコンがいくつか見えます。黄色のアイコンは、CMFDynamicViewFTIを使用します。例えば、標準のPloneのフォルダタイプです。このFTIをみると、二つのフィールドがプロパティタブの下にあります。
- デフォルトビューメソッド
- 利用可能なビューメソッド
RichDocumentでのCMFDynamicViewFTIを使用するために、次のことを行います。
1. CMFDynamicViewFTIのISelectableBrowserDefaultインターフェースのサポートを宣言します。ATDocumentのようにこのインターフェースとCMFDynamicViewFTI/browserdefault.pyのBrowserDefaultMixinの標準の実装を取得します。ATDocumentはすでに、このクラスをミックスしてインターフェースのサポートを宣言しています。
2. デフォルトビューと利用できる追加のビューを定義するためにdefault_viewとsuppl_viewsを自分達のクラスに設定します。これは、あとでportal_typesで変更できます。これができるようにするために、content/richdocument.pyを次のようにします。
default_view = 'richdocument_view'
suppl_views = ('richdocument_view_preview', 'richdocument_view_float')
3. これらのページテンプレートを記述します!RichDocumentでは、デフォルトは、skins/RichDocument/richdocument_view.ptです。補間ビューの同様にrichdocument_view_preview.ptとrichdocument_view_float.ptです。
4. Install.pyのmigrateFTIs()から呼び出すことでCMFDynamicViewFTIにマイグレートします。このメソッドを呼び出すことでプロダクトで定義されている全てのタイプをFTIsをマイグレートします。CMFDynamicViewFTIは標準のCMFのFTIクラスを直接拡張しているので、BrowserDefaultMixinで全てのタイプをミックスインしている限りは(ATContentTYpesのすべてのクラスで行っています)、通常はこれは問題なりません。
migrateFTIs(self, product=PROJECTNAME)