MT4へアップグレードするに当たって1つ困っていたのが、3.3以前なら問題なく動作していたArchiveYearプラグインとArchiveLoadプラグインが上手く動作しなくなっていたことです。メインサイトのMTのアーカイブ頁で年を降順、月を昇順にするのに重宝していたので。これを使うと、Archive Date Headerだけでは
2007年:6月 5月 4月 3月 2月 1月
2006年:12月 11月 10月 9月 8月 7月 6月 5月 4月 3月 2月 1月
としか出来ないのが、
2007年:1月 2月 3月 4月 5月 6月
2006年:1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
のように出来るので便利なんですよね。
なんとかならないかな~と思っていたところ、MT4から新しく追加された年アーカイブとCompareプラグインを組み合わせることで代用できそうだったので、やってみました。その覚え書きを。
1.下準備
以下のプラグインを用意します。
Compareプラグイン
MTTagInvokeプラグイン
動的(ダイナミック)用プラグインはMT4に対応したものをダウンロードして下さい。3.3以前用のダイナミック用プラグインは4では使えないので。MT4対応版がまだない場合は3.3以前用ファイル名を小文字にする修正を行い、4で使えるようにしておきます。
2.タグの記述
以下のタグを月別アーカイブへのリンクを表示したい場所に記述します。Compareプラグインはどちらのケースでも使います。
●MTTagInvoke プラグイン編
年アーカイブリストから該当年を取得するのにMTTagInvoke プラグインを使うケース。静的生成頁で使えます。
<MTArchiveList archive_type="Yearly">
<MTTagInvoke tag_name="MTSetVar">
<MTTagInvokeAttribute name="name">year</MTTagInvokeAttribute>
<MTTagInvokeAttribute name="value"><$MTArchiveDate format="%Y" language="en"$></MTTagInvokeAttribute>
<MTTagInvokeContent></MTTagInvokeContent>
</MTTagInvoke>
<$MTArchiveDate format="%Y" language="en"$>年:
<MTArchiveList archive_type="Monthly" sort_order="ascend">
<MTIfEqual a="[MTArchiveDate format='%Y' language='en']" b="$year" numeric="1">
<a href="<$MTArchiveLink$>"><$MTArchiveDate format="%B"$>月</a>
</MTIfEqual>
</MTArchiveList><br />
</MTArchiveList>
●Smarty編
年アーカイブリストから該当年を取得するのにSmartyを使うケース。ダイナミック・パブリッシング用です。出てくる結果はMTTagInvoke プラグインを使う場合と同じです。
<MTArchiveList archive_type="Yearly">
{{capture name="year"}}<$MTArchiveDate format="%Y" language="en"$>{{/capture}}
<$MTArchiveDate format="%Y" language="en"$>年:
<MTArchiveList archive_type="Monthly" sort_order="ascend">
<MTIfEqual a="[MTArchiveDate format='%Y' language='en']" b="`$smarty.capture.year`" numeric="1">
<a href="<$MTArchiveLink$>"><$MTArchiveDate format="%B"$>月</a>
</MTIfEqual>
</MTArchiveList><br />
</MTArchiveList>
もっとスマートな方法があるかもですが、こういう方法でも何とか出来ますということで。
<2007.8.25 追記>
MT4でMTタグのみで実装できることが分かったので、現在は以下の方法へ移行しています。
月別アーカイブを年毎に区切ってみる(3) 4.0完成版