月別アーカイブのリストに「年度」見出しを付ける。
公開日 : 2007-11-22 20:18:38
MTでサイト構築している際に、色々現場(主にテンプレートタグ/マークアップ担当)から要望が出てくるんだが、まぁウチの会社の場合「できなきゃプラグイン書いちゃえ」なわけで要望あげてくるのも分かるんだけどテンプレートタグでできることはテンプレートタグでやろうよ、ということで。
画像のような感じで、月別アーカイブのリストに年度を表示させるパターン。これは既にプラグインとかあるのかな? いやなくてもMT4ならプラグインいらずで実装できますよね。
要するにMTSetVarBlock と MTIf を使って、年が変わっていた時だけ出力する、ということです。MTSetVarBlockでセットした値はループの中で初期化されるわけでもないようなので、こんな風に変数に値を入れておいて比較、っていうプログラムチックなことが簡単に出来るよね。
ところがところが、やっぱり出来ない! って泣きが入ったんですよ。何が? って、年の表示をさせる箇所を年度の先頭にしたい...というのだよ。
単純に「年」なら以下テンプレートタグだけで実装できます。
<MTArchiveList archive_type="Monthly">
<MTArchiveListHeader>
<$MTArchiveDate format="%Y"$>年
<ul class="module-list">
</MTArchiveListHeader>
<MTSetVarBlock name="CurrentYear"><$MTArchiveDate format="%Y"$></MTSetVarBlock>
<MTIf name="CompareYear" ne="$CurrentYear">
</ul>
<$MTArchiveDate format="%Y"$>年<ul class="module-list">
</MTIf>
<MTSetVarBlock name="CompareYear"><$MTArchiveDate format="%Y"$></MTSetVarBlock>
<li class="module-list-item"><a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a></li>
<MTArchiveListFooter>
</ul>
</MTArchiveListFooter>
</MTArchiveList>
何がややこしいって、4月〜翌3月が年度だとして、単純に「3月だったら」では駄目で(3月にエントリーが一件もないと出力されないし)、しかも4〜12月はいいものの、1〜3月だったら「年度」の数字を-1しないといけないのね。2007年3月は2006年度、ということになるので。
とはいえ、リストアップからすべてプラグインで書くのは悔しいので、数字を-1するところだけプラグイン書いた(所要時間1分)。-1する専用ってのもなんなので、値と属性値を足し算するCalculationプラグインってのにしたのであげておくね。
テンプレートタグの実装の例は以下のような感じで。他に良い方法があるかもしれんけど、とにかくこれで動いている。
<MTArchiveList archive_type="Monthly">
<mt:unless name="Year">
<mt:setvarblock name="startMonth"><$MTArchiveDate format="%m"$></mt:setvarblock>
<mt:if name="startMonth" lt="4">
<$MTArchiveDate format="%Y" calculation="-1"$>年度
<ul class="module-list"><mt:else>
<$MTArchiveDate format="%Y"$>年度
<ul class="module-list"></mt:else>
</mt:if>
<mt:setvar name="printYear" value="1"> <!--←訂正/追記-->
</mt:unless>
<mt:setvarblock name="CompareYear"><$MTArchiveDate format="%Y"$></mt:setvarblock>
<mt:if name="Year" ne="$CompareYear"><mt:if name="printYear"><mt:setvar name="printYear" value="0"><mt:else>
</ul><mt:var name="CompareYear">年度
<ul class="module-list"></mt:else></mt:if></mt:if>
<mt:setvarblock name="Year"><$MTArchiveDate format="%Y"$></mt:setvarblock>
<mt:setvarblock name="YYYYMM"><$MTArchiveDate format="%Y"$><$MTArchiveDate format="%m"$></mt:setvarblock>
<mt:setvarblock name="FiscalYear"><$MTArchiveDate format="%Y"$>04</mt:setvarblock>
<mt:if name="FiscalYear" gt="$YYYYMM">
<mt:unless name="printYear">
</ul><$MTArchiveDate format="%Y" calculation="-1"$>年度
<ul class="module-list"><mt:setvar name="printYear" value="1">
</mt:unless>
</mt:if>
<li class="module-list-item"><a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a></li>
<MTArchiveListFooter>
</ul>
</MTArchiveListFooter>
</MTArchiveList>
というような制作の現場で欲しいものを作ってきた中から出来たのがこいつ(PowerCMS for MT1.0)です。
ということで、どうぞよろしくお願いします。