新しいViewletを追加する(1)
shimizukawa
これから作成するViewletはスマートフォルダ用とします。CMFContentPanelsにもスマートフォルダ用のViewletはあるのですが、表示内容がタイトルだけで概要文が表示されません。そこで、スマートフォルダを表示する時と同じ表示内容になるViewletを作成します。
表示用のPageTemplateを用意
まずはViewletを表示するためのPageTemplateファイルを作成します。ZMIで /plone/portal_skins/custom へ移動してPageTemplateを新規に作成します。オブジェクトIDは何でも良いのですが、CMFContentPanelsの命名方法に従って viewlet_smartfolder_list としておきます。次にこのオブジェクトの中身を作成します。とりあえず以下のようにスケルトンを用意しましょう。
xmlns:metal="http://xml.zope.org/namespaces/metal"
i18n:domain="plone">
<body>
<div metal:define-macro="smartfolder_contents_viewletconf">
</div>
<div metal:define-macro="smartfolder_contents">
</div>
</body>
</html>
viewlet_smartfolder_listには2つのマクロを定義しています。CMFContentPanelsのドキュメントを読むと書いてあるのですが、Viewletのマクロ名を hoge とした場合、そのViewletの設定用UIのマクロ名を hoge_viewletconf とする必要があります。ここではViewletのマクロ名と設定用マクロ名は上記のように smartfolder_contents と smartfolder_contents_viewletconf と命名しています。
Viewletを登録する
マクロ定義のみのPageTempalte(Viewlet)を用意しました。次はいきなりViewlet登録を行います。まずは空っぽのViewletが使えるモノかどうかを確認する意味で、実際にCMFContentPanelsで試してみようという作戦です。
設定のためにZMIで /plone/portal_contentpanels に移動すると、CMFContentPanelsで使えるViewletがずら~っと登録されています。このページの一番下に移動して、今作ったばかりの空Viewletを登録しましょう。入力するパラメータは以下の通りです。
| Title: | SmartFolder list |
|---|---|
| Id: | smartfolder_list_viewlet |
| URL: | string: here/viewlet_smartfolder_list/macros/smartfolder_contents |
| Permission: | View |
| Category: | PT:Topic |
| Visible: | On |
上記設定値のに、今作ったPageTemplateのIDとマクロ名が出てきています。タイトルやIDは適当に‥‥いちおうCMFContentPanelsの命名規則に従って付けておきましょう。入力しおわったらAddボタンを押して追加します。
これでCMFContentPanelsで上記のViewletを使えるようになったはずです(空っぽですが)。Categoryを PT:Topic としているので、 smartfolder list というViewlet名を選択できるのは、Related Contentでスマートフォルダ型オブジェクトを選択しているときだけです。ちなみに PT はPortalTypeの略ですので PT:Folder とか PT:COREBlog2 等と記述します。他に GL, GN を使用することが出来ます。GL,GNで使用できる文字列についてはportal_contentpanelsの初期設定項目を参考にしてください。
とりあえず、問題が起きたときに切り分けしやすいように、ここまでの内容で動くことを確認しておいた方が良いでしょう(CMFContentPanelsのPanel configuration でViewletとして利用可能か確認してみましょう)。
Related Content にスマートフォルダ(ここではNews)を選択すると、Content Related のところに SmartFolder list がちゃんと表示されました。しかしここまでの状態では、まだ表示用のテンプレートを書いていないため、SmartFolder listを選択してもPreviewには何も表示されません。次は表示用のテンプレートを記述し、Viewletとして完成させます。

