So-net無料ブログ作成
検索選択

The Zope 3 Developer's Handbook の 14章と24章と 28章 [Zope 3]

HTTP の View に関する章の主だったところで、ざっと気付いたことを書いた、かなりいい加減なメモ。

[14章] Content の View を定義
Plone でいうところの、portal_types の、type 毎の、 Initial view name で指定しているものや、Action で指定しているもののように、Content に関連付けられた View を ZPT で書く
#configure.zcml で簡単な、入力フォーム、編集、一覧表示を出すのは 13章でやった

ポイントは、configure.zcml の browser:page ディレクティブで
1.name = URL として参照できるファイル名 xxxxx.html
2.for = どのインターフェースに対してのビューか
3.class = ZPT から呼ばれる View クラス
4.template = ZPT のファイル名
5.permission = アクセスするパーミッション
7.menu と title = ZMI に追加するメニューの項目
を指定すること。3. と 7. は必要なければ、指定しなくても良い。

3.で指定する class に、Content のオブジェクトがコンストラクタの2番目の引数として渡される。
このリスト↓で言うと、context が Content のオブジェクト。
http://svn.zope.org/book/trunk/messageboard/step02/browser/thread.py?rev=27149&view=auto
View クラスでは、def __init__() で、2番目のパラメータ(context)を自分のメンバー変数に設定して、メソッド(上の例では listContentInfo)が呼ばれたときには、その変数を参照して操作するのがお決まりパターン。

ZPT からは "context/title" とするとオブジェクトのプロパティが、"view/author" とすると View クラスのメソッドが呼べる。
View クラスのメソッドが辞書を返し、それを ZPT で参照している例は ↓の parent_info の所。
http://svn.zope.org/book/trunk/messageboard/step02/browser/message.py?rev=27149&view=auto
http://svn.zope.org/book/trunk/messageboard/step02/browser/details.pt?rev=27149&view=auto

View クラスから ZPT を呼ぶのは ViewPageTemplateFile を使う
ここ↓で、再帰的に subthread.pt を呼んで、ツリー構造を作ってる。
http://svn.zope.org/book/trunk/messageboard/step02/browser/thread.py?rev=27149&view=auto

ここ↓では、metadata(DublinCore)からプロパティ値を取得してる。
http://svn.zope.org/book/trunk/messageboard/step02/browser/message.py?rev=27149&view=auto
(ZPT で直接 Dublin Core の中身は見れなくて、class のメソッドを経由しないとダメ)

View の namespace にアクセスするには、URL で @@ を頭に付ける。
たとえば、ルートにある foo オブジェクトに bar.html という page でアクセスしたい場合、 http://somehost/foo/@@bar.html とする。

[24章] Skin の話
例えば、SomeSkin というスキンでは、http://hostname/++skin++SomeSkin/foo/@@bar.html
という感じで、++skin++ のあとに skin 名を指定してアクセスする。
(もしくは、デフォルトの skin を etc/overrides.zcml に書く)
インストールした状態で、
・Basic(zope.app.basicskin)
 基本的な機能だけを持った skin。default レイヤーは zope.component で定義されてる
・Rotterdam(zope.app.rotterdam)
 デフォルトの skin
・StaticTree(zope.app.tree)
 Rotterdam との違いは、ナビゲーションに JavaScriptを使わないところ
・Debug(zope.app.debugskin)
 エラーの時の Traceback を画面に出力する
という skin があって、Subversion から取ってきたソースでは、さらに ZopeTop というカラフルな skin がある。
skin が書けるようになるためには、ここらへんの skin がどうなっているか見るのが一番速そう。
パッケージを書くというのと、skin を書くというのは分けて考えたほうがいいと思う。
(専用の skin のないパッケージもあるし、新規の Content を定義しないで、skin だけ書いても良いわけで、)

Zope 3 の skin は、CMF/Plone のように TTW で設定・定義できないが考え方は同じで
・skin は、skin ディレクティブで定義して、いくつかの layer で構成されている(順番あり)
・layer は layer ディレクティブの中で宣言
・page ディレクティブで、ZPT がどの layer に属するかを書く
という感じ。

[28章] Content に結びつかない Browser リソースを定義する方法
・・・だけど、Content に結びつかないリソースで、skin でもないものをわざわざ定義する場面(使い道)を思いつかない。
データの中身をPython で処理しないリソース(テキスト、ファイル、イメージ等)を配置するのに使う


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この記事のトラックバックURL:
※言及リンクのないトラックバックは受信されません。