月別アーカイブのリストに「年度」見出しを付ける。

| コメント(0) | トラックバック(1)

月別アーカイブのリスト(年を表示させる) 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)です。

ということで、どうぞよろしくお願いします。

トラックバック(1)

トラックバックURL: http://junnama.alfasado.net/cgi/mt/mt-tb.cgi/148

便利なネット環境のおかげで、わからないこと、困っていることを調べることで、先人に... 続きを読む

コメントする

Facebook

Twitter

このブログ記事について

このページは、Junnama Nodaが2007年11月22日 20:18に書いたブログ記事です。

ひとつ前のブログ記事は「KOFの会場にACアダプタ忘れて来て凹む。」です。

次のブログ記事は「ニッポンIT業界希望論。」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.2.6