a-blog cmsのモジュールとテンプレート(破)

 最近はまとまったサイズのシステムの制作にいそしんでいます。サイズが大きくなると考える事も増えますね。SEの研修を受けている友人の話を聞くと、フローとか機能の設計をしっかりやっているようです。僕も、もうちょっと頭を使った方がいいのかもしれません…。

 例によって勘で使える人は、読み飛ばし推奨の記事です。今回は初心者向けではありませんが、教科書的に整理しているだけの内容です。

 今回は、モジュールを中心とした、管理ページとテンプレートの関係についてです。

管理ページとテンプレートの関係

 a-blog cmsは設計上、とてもきれいに機能や役割が整理されています。それはモジュールとテンプレートの関係でも同じことです。

 a-blog cmsでは、どこの情報をどのように表示するかなどの設定は全て管理ページから行われます。日時表示のフォーマットなども設定できます。表示するモノの内容面はすべて管理ページからの設定になります。(現状、JSBannerなど一部の例外はありますが)

テンプレート
表示の体裁
管理ページ
表示の内容(設定)

 さらっと書いていますが、この設計思想が重要なポイントだと思っています。HTML(論理構造)とCSS(装飾設定)みたいな関係ですね。役割を明確に分担しています。つづく。

テンプレートのほう

 例えばMovable Typeだと下記のように、記事を何件表示するか、のような記述がテンプレートタグに含まれていたりします。

<ul>
     <mt:Entries lastn="5">
          <li><mt:EntryTitle /></li>
     </mt:Entries>
</ul>

 そのあたりの役割をa-blog cmsでは、表示上の整形はテンプレート、表示内容の設定は管理ページ、と明確に役割が分けられています。そのため、a-blog cmsの場合はテンプレート上では下記のようになります。

<!-- BEGIN_MODULE Entry_List -->
<ul>
     <!--  BEGIN entry:loop -->
          <li>{title}</li>
     <!-- END entry:loop -->
</ul>
<!-- END_MODULE Entry_List -->

 記述量は若干増えますが、loopだとかBEGIN&ENDだとか、明示的な記述になります。このテンプレートタグに相当する部分は、実はモジュール側でかなり自由に設計できるので、追加プラグインの作りやすさという意味で比重が増してきます。

 追加プラグインの可能性については後々語りたいところです。自前のテンプレートエンジンを備えていて、入出力の関係性をハッキリさせたファイル構成と、それをサポートする関数群がプラグインの制作を加速させます。

管理ページのほう

 その上で、管理ページ(例:下図)から表示件数やソートを設定して制御します。

管理ページ

 上図はEntry_Listというa-blog cmsの中でも1、2を争う単純なモジュールなので、項目が少ないですが、逆にトップクラスの柔軟性を併せ持つEntry_Summaryだと下図のような設定画面になります。現在はdatetime系がdate関数の引数そのものだったり、だいぶ大振りな感はありますが、そのあたりも含めて正式版に合わせて進化していきます。(ますよね?)

管理ページ

個々のモジュールに一意な設定を

 モジュールに一意な設定をするときはモジュールIDを設定して割り当てます。管理ページから下図のように指定して

管理ページ

 下記のようにテンプレートに記述します。

<!-- BEGIN_MODULE Entry_List id="lineage" -->
<ul>
     <!--  BEGIN entry:loop -->
          <li>{title}</li>
     <!-- END entry:loop -->
</ul>
<!-- END_MODULE Entry_List -->

 これでモジュールID = "lineage"に対して一意な設定ができます。CSSのdiv#wrapperみたいな記述と同様に考えてもらえればと。IDentification、個体識別という意味で同じです。この先は、実際にベータ版を触っていただければ。

最後は何を書こう

 序・破、ときたら離なわけですが、3つめで何を書くかは困り者です。

 ところで、ジョハリの窓 ってみなさんご存知でしょうか? あまりメジャーな言葉ではありませんが。

 見えるモノと見えざるモノの関係性を明確にしたモデルです。自己を変えることで、未知の窓の範囲は狭まるかもしれません。その未知を切り開かなければ、良い仕組みはできないように思えます。変化することで、今の自分に見えざるものを、可視化しなくてはいけません。