[kansaipm] Re: データベースのレポート作成について

Yasushi Nakajima sey at jkc.co.jp
Fri Aug 30 04:49:54 CDT 2002


Tatsuhiko> すいません、「グルーピング」という用語がよくわからなかったのですが、こ

 まず都道府県でグループ化し、次に市町村でグループ化し、…というような表
示のしかたです。

Tatsuhiko> れって要は Jakarta Taglib みたいに、プレゼンテーション層をコンポーネン
Tatsuhiko> ト化して再利用しよう、っていうことですよね。

 まさしくその通りです。

Tatsuhiko> 
Tatsuhiko> 自分はTemplate-Toolkitっていうエンジンを使ってるんですが、ページング用
Tatsuhiko> にこんなモジュールをつくってみたりしました。Class::DBI というデータベー
Tatsuhiko> スモデリングクラスと組み合わせて使います。若干クセがあるのですけど、一
Tatsuhiko> 覧機能にページングをつけるのが、2,3行の追加でできます。
Tatsuhiko> 
Tatsuhiko>   http://search.cpan.org/author/MIYAGAWA/Class-DBI-Pager-0.03/

 Template-Toolkitも宮川さんのモジュールも十分に便利なんですが、まだ 
WHILE とか FOREACH とかいったプログラム的要素がHTMLの中に混在してしまい、
テンプレートをHTMLエディタでデザイナーにいじってもらうというのが難しくな
りますよね。

 見てもらった方が話が早そうです。私のGreeというレポートエンジンでは次の
ようになります。@[…]@ というタグで指示を埋め込みます。論理的な構造を見
やすいようにHTML部分は省いてますが、@[…]@以外の部分は好きにHTMLを書けま
す。

・単純な繰り返し…@[repeat()]@と@[end()]@の間が繰り返される
  --------------------------------------
  @[repeat()]@
  @[メーカー]@ @[商品名]@ @[価格]@
  @[end()]@
  --------------------------------------

・「メーカー」でグルーピング…繰り返しを入れ子にするだけ
  --------------------------------------
  @[repeat()]@
  @[メーカー]@ 
      @[repeat()]@
      @[商品名]@ @[価格]@
      @[end()]@
  @[end()]@
  --------------------------------------

・商品10個毎にページ分割…repeat(ページ当たり数)と書くだけ
  --------------------------------------
  @[repeat()]@
  @[メーカー]@ 
      @[repeat(10)]@
      @[商品名]@ @[価格]@
      @[end()]@
  @[end()]@
  --------------------------------------

・メーカー5個毎にページ分割
  --------------------------------------
  @[repeat(5)]@
  @[メーカー]@ 
      @[repeat()]@
      @[商品名]@ @[価格]@
      @[end()]@
  @[end()]@
  --------------------------------------

・ナビゲーションも付けてみると
  --------------------------------------
  @[page()]@/@[pages()]@ ページ
  <a href="@[prev()]@">前ページ</a>
  <a href="@[next()]@">次ページ</a>
  @[repeat(5)]@
  @[メーカー]@ 
      @[repeat()]@
      @[商品名]@ @[価格]@
      @[end()]@
  @[end()]@
  --------------------------------------

※先頭ページの「前ページ」や最終ページの「次ページ」リンクは不要ですが、
  <a href=""…</a> というURLが空のリンクは削除されるという仕組みが組み込
  まれているので条件分岐を書く必要はありません。

 ついでに親子ページに分けてリンクする例も見てもらいましょう。

・親ページのテンプレート…chain()で指定した子テンプレートはその場所に書
  かれているように扱われるので、繰り返しが入れ子になり、「メーカー」でグ
  ルーピングされることになる。そしてchain()は各メーカーに応じて
  テンプレートgoods.htmlから作られたページのURLとなる。
  --------------------------------------maker.html
  @[repeat()]@
  <a href="@[chain(goods.html)]@">@[メーカー]@</a>
  @[end()]@
  --------------------------------------

・子ページのテンプレート
  --------------------------------------goods.html
  @[メーカー]@の商品リスト
  @[repeat()]@
  @[商品名]@ @[価格]@
  @[end()]@
  --------------------------------------

…とまぁ、こんな感じです。デザイナーに@[repeat()]@や@[end()]@や@[chain
()]@の意味くらいは理解してもらう必要がありますが。


中島 靖




More information about the Kansai-pm mailing list