wiki.zope.jp
OnlyOneIndexHtmlJP
   
RecentChanges WikiHelp WikiPractice JumpSearch

OnlyOneIndexHtmlJP


Only one index_html

Created by march. Last modified on 2001/09/09.

改訂履歴(訳注:原文の履歴) (Document History)

  2001/01/09 作成 
  2001/09/05 補足説明を追加
  2001/09/09 「DTMLmethod」に関する説明を追加
  

webサイトの構造

ほとんどのWebサイトは階層木構造をとっています。 また、そのサイトでカバーしている一つのトピックについて章や副章に分けることも考えられます。 Zopeは、互いに階層的に含むことができるフォルダーを提供しているので、その概念に完全にフィットします。 特別のフォルダーにアクセスするURLは、単に表示されたフォルダーへのパスを反映します、例えば

http://www.myzopesite.com/about/mission

は、フォルダー「about」の中に含まれている、「mission」という名前のフォルダーを単に指し示しています。 あなたのZopeフォルダーに読みやすく覚えやすい名前をつけることは、その技術的なインプリメンテーションの詳細ではなく、 あなたのサイトの論理的な構造を反映するURLに結びつきます。

このコンセプトでは、Zopeウェブサイトの各ページには個別のフォルダーが使用されるべきです。 読みやすい名前(あなたの協定にもよりますが、たぶん全部小文字)のフォルダーを使い、それに標題をつけるべきです。 サブ・トピックを追加するには、単にすでにあるフォルダーの中にフォルダーを加えるだけです。

ところで中身はどこ?

フォルダー群の構造だけではWebサイトはできません。 例えばHTMLページ形式のコンテンツがなければいけません。 ZopeではコンテンツはたいていDTMLメソッドに格納されます。 フォルダーが見られたときに表示されるデフォルトのメソッドの名前は、「index_html」です。 このようなメソッドは以下のようになります。


  <dtml-var standard_html_header>
  Here is my content of this page...

<dtml-var standard_html_footer>


すべてのページの見た目をそろえるために、ページのヘッダーとフッターを別々のメソッドに入れるのは良いアイディアです。 Zopeのaquisition featureにより、これらのメソッドがたった一回しかルートフォルダに作られなかったとしても、 すべてのサブフォルダからアクセスすることが出来ます。

コンテンツだけ

このコンセプトは、Zopeサイトを作る方法の定番です。あいにく、このコンセプトでは、コンテンツ編集者に、技術的な実装の詳細を 彼が編集する全てのページに加えることや、ページで使われているヘッダーやフッターを本当に修正することを強要します。このコンセプトを少し修正することで、大幅にフレキシブルになります。

以下のような、たった一つのDTMLMethod(注1)のindex_htmlを、あなたのサイトのルートフォルダに置くのです。


  <dtml-var standard_html_header>
  <dtml-var content_html>
  <dtml-var standard_html_footer>

全てのページの個々のコンテンツはcontent_htmlと名づけられたDTMLMethodにおきます。これらのメソッドにはコンテンツだけが含まれ、ヘッダーやフッターのメソッドは含まれません。こうすると、あなたのプロジェクトの構造は以下のようになります。


  ROOT
  |
  +-- index_html
  +-- content_html
  +-- standard_html_header
  +-- standard_html_footer
  |
  +-- topic1
  |   |
  |   +-- content_html
  |
  +-- topic2
  |   |
  |   +-- content_html
  |   +-- subtopic1
  |       |
  |       +- content_html
  |
  +-- topic3
      |
      +- content_html


獲得により、ルートフォルダのindex_htmlメソッドは、全てのサブフォルダで使うことが出来ます。例えば、全てのページのレイアウトをダイナミックに変えられるというふうに、柔軟性を得られます。以下のような別のメソッドprintがルートフォルダにあるとしましょう。


  <dtml-var print_html_header>
  <dtml-var content_html>
  <dtml-var print_html_footer>

すると、単純にページのURLに「/print」と付け加えるだけで、あなたのサイトのすべてのページを、印刷用レイアウトで描画することが出来ます。

1) index_htmlは「DTMLDocument」ではなく、「DTMLMethod」でなければいけません。

It has to be a "DTMLMethod", NOT a "DTMLDocument". The method will be executed in the context of the subfolders, while the DTMLDocument has its own context and would (due to aquisition rules) always refer to the content_html method of the root folder. Thanx Chris and Oli for that hint!

Last edited Wed, 13 Sep 2006 17:43:25 +0900 Edit this page