wiki.zope.jp
PageTemplateSimpleTutorial
   
RecentChanges WikiHelp WikiPractice JumpSearch

Zope Page Templates: Getting Started



イントロダクション

ページテンプレートというのは、ウェブページを生成するツールです。それによってプログラマとデザイナーは、Zopeウェブアプリケーションのための動的なウェブページを、協力し合って作れるようになります。デザイナーたちはページテンプレートを使えば、自分たちが今まで使っていたツールを捨てる必要なしにページのメンテナンスができるし、これらのページをアプリケーションに埋め込む作業を続けられます。

目標はワークフローを自然にすることです。デザイナーはテンプレートをつくる際に WYSIWYG スタイルの HTML エディタを使い、プログラマはそれをアプリケーションの一部にするために編集します。必要があれば、デザイナーは再びテンプレートを自分のエディタで読み込み、構成や外見にさらなる修正を加えることができます。プログラマによって加えられた変更を保存するために必要なステップをたどれば、デザイナーはアプリケーションを壊すことはありません。

ページテンプレートは次の3つの原則を採用することによって、上記の目標を目指します。

1.編集ツールを素敵に使いこなす。

2.ほぼ見た目どうりに(WYSIWYGふうに)編集作業ができる。

3.構造上のロジック部分以外は、テンプレートとコードを切り離す。

ページテンプレートというのは、それが生成することになるページのモデルです。特にそれは妥当な HTML ページです。HTML は高度に構造化されていて、WYSIWYG エディタはその構造を慎重に保とうとするため、プログラマが最初の原則に従いつつページを変更する際には、厳しい制約があります。


ページテンプレートは誰のものなのか?

ページテンプレートは、動的なウェブページをつくるために共同作業する必要があるプログラマとデザイナー達のためのものです。もしあなたがテキストエディタを使って自分のウェブページすべてを編集し作り上げるのだとしたら、ページテンプレートのことは気にしなくてもいいでしょう。その場合にも、ページテンプレートの方が、もう一つの選択肢であるDTMLよりはシンプルで理解しやすく使いやすいことでしょう。

なぜまた別のテンプレート言語が必要なのか?

世間にはテンプレートシステムがあふれています。その中でも、ASP や JSP や PHP などはかなりポピュラーなものです。なのに何故また別のものを作るのでしょうか。

第一に、これらのテンプレートはどれをとってもHTMLデザイナーのために作られたものではないという点があります。一度ページがテンプレートへと変換されると、それは妥当なHTMLではなくなり、アプリケーションの外部から手を加えるのが難しくなります。そうしたことは、Zopeのページテンプレートの第一(編集ツールを素敵につかいこなす)と第二(見た目どおりに作業をする)の原則をある意味で破ることになってしまいます。プログラマはデザイナーの作業を「乗っ取って」、HTMLをソフトウェアに変えるべきではありません。Enhydraプロジェクトの一部であるXMLCは、私たちと目標を同じくしたものですが、プログラマがそれぞれのテンプレートに対しかなりの量のJavaコードを書く必要があります。

第二に、これらのテンプレートシステムはすべて、表示とロジックそしてコンテンツ(データ)の分離ができないという悩みをかかえています。こうして第三の原則(テンプレートとコードの分離をはかる)が守れないということは、コンテンツ管理の柔軟な拡張性と、これらのテンプレートシステムを使うウェブサイトの開発努力を減じてしまいます。

原則の適応

ページテンプレートには、特別なタグ属性から成るテンプレート言語(TAL)があります。たとえば、動的なページタイトルは次のように見えるはずです。

       < title tal:content="here/title"> Page Title</title>

tal:content 属性というのはは、TALの文です。XMLの名前空間( tal: の部分)を持っているため、ほとんどの編集ツールは、その部分を理解できないと文句を言ったり、その部分を削除したりはしないはずです。また、WYSIWYGエディタやウェブブラウザーで読み込んだときにも、テンプレートの構造や外見を変えたりしません。content という名前は、それがtitleタグの中身(content)をセットするものだということを示し、"here/title"という値はテキストをそのタグの中に挿入するための表現です。

この例はまた、第二の原則(見た目どおりに作業をする)を説明するものでもあります。つまり、あなたがエディタでそのテンプレートを見たとき、title というテキストは動的なtitleテキストの挿入場所を示すものとして働きます。テンプレートは、生成されたドキュメントがどのように見えるかという見本のように働くのです。

タグ全体やその中身やいくつかの属性だけを置き換えるためのテンプレートコマンドもあります。一つのタグを何度も繰り返したり、すべて削ったりすることもできます。いくつかのテンプレートのある部分を結合させたり、シンプルなエラー処理を指定したりすることもできます。こうした能力のすべては、ドキュメントの構造を生成するために使われます。サブルーチンやクラスをつくったり、ループやテスト文を書いたり、複雑なアルゴリズムを表すことはできません

テンプレート言語は、その可能性ほどには、あえて強力でも汎用的でもないように作られています。Zopeのように、ビジネスロジックやページレイアウトに関わる部分は他のオブジェクトに扱わせるようなフレームワークの中で使われる目的で、テンプレート言語は作られているのです。

たとえば、テンプレート言語は仕入れ書のページをレンダリングするのに役立つでしょう。列の項目ごとに行を生成し、説明・量・価格などをそれぞれの行のテキスト部分に挿入していきます。データベース内に仕入れのレコードを作ったり、クレジットカード処理とやりとりしたりする目的では使われないでしょう。

Last edited Sun, 10 Sep 2006 16:24:01 +0900 Edit this page