wiki.zope.jp
EnvironmentalAcquisition
   
RecentChanges WikiHelp WikiPractice JumpSearch

環境獲得【Environmental Acquisition】


基本的な考え方

URL呼び出し

http://mojix.org/foo/bar/hoge とかいうURLを呼び出した場合、もし/foo/barフォルダにhogeというobjectがなければ、Zopeは1つ上の/fooフォルダを探す。

もし/fooフォルダにhogeというobjectがあれば、それが呼ばれる。

このとき、/foo/barフォルダは/fooフォルダからhogeというobjectを受けついだかのようにふるまっている。これが「獲得」。

もし/fooフォルダにもhogeがなければ、Zopeは/フォルダ(ルート)まで探しにいく。それでもなければエラー。

なお、ここでobjectと書いているのは、正しくは「objectあるいはプロパティ」。つまりhogeはプロパティでも良い。

(mojix)

DTMLでの場合

以下のようなディレクトリ構造の場合、barという画像オブジェクトをfooというDTML method オブジェクトに張り付けたいとした場合、 fooには<dtml-var "b.bar">と書く。

    /
    + a/
      + foo(DTML method) ... <dtml-var "b.bar">
    + b/
      + bar(image/png)
    

PageTemplateでの場合

同じくPageTemplateオブジェクトに張り付けたいとした場合、 fooには<img tal:replace="structure container/b/bar" />と書く。

    /
    + a/
      + foo(PageTemplate) ... <img tal:replace="structure container/b/bar" />
    + b/
      + bar(image/png)
    

DTMLでの「"b.bar"」及びPageTemplateでの「container/b/bar」というのは、bというフォルダオブジェクトの下にあるbarというオブジェクトを意味するが、 aにはそのようなフォルダは含まれてはいないのがわか る。そこで、ZORB(Z Object Request Broker)が上の階層を見に行って、 bというフォルダを探す。無ければさらに上を探すと言った感じに、bというフォルダが/(ルートディレクトリ)にまでさかのぼって探す。

これらの例では、一つ上がってすぐにbというフォルダが見つかる。そうすると、次に「bar」というオブジェクトがあるかどうかを探す。 もし、これが今見つかっていたbに無かった場合は、先ほどと同じ動作を行い、ほかのbというフォルダを探しに行く。 今回の例では、barというオブジェクトが含まれているのでそれを貼り付けることになる。


関連ブックマーク

Last edited Sun, 10 Sep 2006 06:02:58 +0900 Edit this page