« KOFの会場にACアダプタ忘れて来て凹む。 | メイン | ニッポンIT業界希望論。 »

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

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

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

カテゴリー: MovableType

トラックバック

この一覧は、次のエントリーを参照しています: 月別アーカイブのリストに「年度」見出しを付ける。:

» 月別アーカイブリストを年度別に表示する 送信元 chibipoppo blog
便利なネット環境のおかげで、わからないこと、困っていることを調べることで、先人に... [詳しくはこちら]

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


トップページ | アーカイブ(このブログの全てのエントリーの一覧)

最近のエントリー