a-blog cmsのモジュールとテンプレート(破)
Posted: Updated:
最近はまとまったサイズのシステムの制作にいそしんでいます。サイズが大きくなると考える事も増えますね。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つめで何を書くかは困り者です。
ところで、ジョハリの窓 ってみなさんご存知でしょうか? あまりメジャーな言葉ではありませんが。
見えるモノと見えざるモノの関係性を明確にしたモデルです。自己を変えることで、未知の窓の範囲は狭まるかもしれません。その未知を切り開かなければ、良い仕組みはできないように思えます。変化することで、今の自分に見えざるものを、可視化しなくてはいけません。