Under the Bridge

a Picture of the Late Him

定数・変数専用のモジュールを使う

2008年1月 1日 16:40 | Writer: yoshi | 記事本文 | コメント(0) | トラックバック(0)

このテストはMovable Type 4.1b2で行っている。

変数生成を一箇所のモジュールにまとめておき、使用するときMTGetVarで利用する手法である。

なお、テンプレートをかなり弄くり、再構築を繰り返すので、テストはかなり面倒である。

概念

変数専用の新しいモジュール(例:mdlVar)を生成し、そこへ変数を宣言(列挙OK)し、使用するテンプレート、たとえば、カテゴリアーカイブのみからその変数を参照したい場合は、カテゴリアーカイブテンプレート(正式名称:ブログ記事リスト)からmdlVarをインクルードするとヨイ。

ステップ1 変数宣言専用のモジュールを準備

20080101_01.gif

「ブログのテンプレート」ページへ。テンプレートモジュールがこのように並んでいる。「モジュールテンプレートを作成」リンクをクリックし、適当な名前で変数宣言専用のモジュール(この例ではmdlVarと命名)を作成する。


20080101_02.gif

中にMTSetvarやMTSetVarBlockやsetvarモデファイアを駆使して変数宣言する。


テストでは、以下のようなVar1~Var5という変数名でコードを書いた。


<MTSetVar name="Var1" value="<p>このブログ記事を参照しているブログ一覧: <a href="http://www.apstars.com/mt41b2/211movable_type4/test.php">配列使ってみたテスト</a></p>">
<MTSetVarBlock name="Var2"><MTTags glue=","><MTTagName></MTTags></MTSetVarBlock>
<MTCategories setvar="Var3"><MTCategoryLabel></MTCategories>
<MTSetVarBlock name="Var4"><mt:for var="x" from="1" to="10"><MTGetVar name="x">,</mt:for></MTSetVarBlock>
<MTSetVarBlock name="Var5"><MTGetVar name="main_template"></MTSetVarBlock>

ステップ2 変数を使いたいテンプレートへインクルード

この変数を使用したいテンプレート(アーカイブインデックス、メインページ、ウェブページ、ブログ記事、ブログ記事リスト)の先頭付近へ、以下のようにインクルードコードを書く。


<$MTInclude module="mdlVar"$>

ステップ3 変数を呼び出す

変数を呼び出すときは普通にMTGetVarでヨイ。ステップ2を行っていないテンプレートから生成されるhtmlには変数は出力されない。なお、エントリへeval-templateプラグインを適用している場合は、もちろんエントリ中でも変数を出力可能である。

Val1を出力する場合は以下のように書く。


<MTGetVar name="Var1">

結果と考察

うまくいった。Movable Type4.1b2でしかテストしてはいないが、恐らくMovable Type4.0でも動作するだろう。何でかというと、デフォルトテンプレートがそういう思想の元設計されている(ぽい)からである。いろんなモジュールでMTIfで「これはメインインデックスかどうか?」などの判定しているけど、アレである。

注意点だが、ほんとうは変数名はルールに従った命名を行わないと駄目だ。上のサンプルでは適当にVa1とかVar2とかやっているが、本当は意味のあるちょっと長めの変数名がいいと思われる。この手法を用いてサイトを製作する場合、変数名・変数内のデータは事前にサイト設計書を作成して、リストに印刷しないと仕事にならないだろう。

2008/01/02 追記:mdlVarへ書くMTSetVar系のコードは、改行つきで沢山使用して再構築を行うと大量の空白行を生む。もしこのようなコードを一行で書くと、コードの見通しは最悪に悪くなる(というか、まともに使えない)。無駄な空白行をカットするプラグインなどを使用するのがいいと思う。ページ先頭の改行を削除する(The blog of H.Fujimoto)を試してみたが、実にいい感じである。

考えつく使途

二回以上同じようなコードを書かねばいけない場合、有効そうだ。

具体的には、そうだな...「カテゴリ毎に表示を変えるには?」エントリの内容のようなことは、(多少キメウチが発生しそうだが)十分エレガントにできる手ごたえである。

トラックバック(0)

このブログ記事を参照しているブログ一覧: 定数・変数専用のモジュールを使う

このブログ記事に対するトラックバックURL:

コメントする






Categories
Entries
Feed
スポンサードリンク

parts

フィードメーター - Under the Bridge

あわせて読みたい

なかのひと

2008年4月5日開催、MT4LP5

2008 yoshi(apstar)