記事書かなくなってまた1年。
続き書きます。

前回記事 MT 各年度遷移ナビゲーション出力 その1


問題:出力される並び順が想定とは逆になってしまう

● MTテンプレートへの記述 MTfor文を逆回転

<$MTSetVar name="startYearForDraw" value="$newestYear"$>
<$MTSetVar name="endCount" value="$newestYear"$>
<$MTSetVar name="endCount" op="-" value="$oldestYear"$>
<ul>
<MTFor from="0" to="$endCount">
<li><$MTGetVar name="startYearForDraw"$>年</li>
<$MTSetVar name="startYearForDraw" op="-" value="1"$>
</MTFor>
</ul>

1行目・・・
出力用の値を定義(最新年をセット)
2-3行目・・・
ループ用の値を定義(最新年から最古年を引いたものをセット)
例:2013 - 2010 = 3

※MTForのincrementは減算が出来ない。


MTForの動作(1周目)
===============================================
<p><$MTGetVar name="startYearForDraw"$>年</p>
↑まず、最新年度を出力 (2012)
<$MTSetVar name="startYearForDraw" op="-" value="1"$>
↑最新年度 - 1をセット (2011)
===============================================


MTForの動作(2周目)
===============================================
<p><$MTGetVar name="startYearForDraw"$>年</p>
↑1周目でセットされた最新年度を出力 (2011)
<$MTSetVar name="startYearForDraw" op="-" value="1"$>
↑最新年度 - 1をセット (2010)
===============================================

問題:記事がある年度が歯抜けの場合、記事がない年度も出力されてしまう。
記事がある年度が 2012年 2011年 2009年の場合、
ーーーーーーーーーーーーーーーー
> 2012年
> 2011年
> 2010年  ←リンク先無し
> 2009年
ーーーーーーーーーーーーーーーー
と出力されてしまう。


● MTテンプレートへの記述 上記MTfor文を年度があるか判定ifで囲う

<MTSetVarBlock name="entryIfNonZero"><MTArchiveList archive_type="Yearly"><MTEntries lastn="1"><$MTEntryDate format="%Y"$>,</MTEntries></MTArchiveList></MTSetVarBlock>
<$MTSetVar name="startYearForDraw" value="$newestYear"$>
<$MTSetVar name="endCount" value="$newestYear"$>
<$MTSetVar name="endCount" op="-" value="$oldestYear"$>
<ul>
<MTFor from="0" to="$endCount">
<MTIf name="entryIfNonZero" like="$startYearForDraw">
<li><$MTGetVar name="startYearForDraw"$>年</li>
</MTIf>
<$MTSetVar name="startYearForDraw" op="-" value="1"$>
</MTFor>
</ul>

1行目・・・<MTSetVarBlock name="entryIfNonZero"...
記事がある全年度を出力
(記事がある年度が 2012年 2011年 2009年の場合)
出力例:2012,2011,2009,

8行目・・・<MTIf name="entryIfNonZero" like="$startYearForDraw">
記事がある全年度の値と、最新年から最古年までの値とをマッチング。
もしマッチしたら、内容を出力。


これで、記事がある年度が 2012年 2011年 2009年の場合、
ーーーーーーーーーーーーーーーー
> 2012年
> 2011年
> 2009年
ーーーーーーーーーーーーーーーー
と出力出来るようになりました。

● 以上を合体 まとめ

<MTIgnore>ナビゲーション共通定義</MTIgnore>
<MTSetVarBlock name="newestYear"><MTArchiveList archive_type="Individual" lastn="1"><$MTEntryDate format="%Y"$></MTArchiveList></MTSetVarBlock>
<MTSetVarBlock name="oldestYear"><MTArchiveList archive_type="Individual" lastn="1" sort_order="ascend"><$MTEntryDate format="%Y"$></MTArchiveList></MTSetVarBlock>
<MTSetVarBlock name="presentYear"><MTEntries lastn="1"><$MTEntryDate format="%Y"$></MTEntries></MTSetVarBlock>
<MTSetVarBlock name="entryIfNonZero"><MTArchiveList archive_type="Yearly"><MTEntries lastn="1"><$MTEntryDate format="%Y"$>,</MTEntries></MTArchiveList></MTSetVarBlock>
<$MTSetVar name="startYearForDraw" value="$newestYear"$>
<$MTSetVar name="endCount" value="$newestYear"$>
<$MTSetVar name="endCount" op="-" value="$oldestYear"$>
<MTIgnore>ナビゲーション出力</MTIgnore>
<ul>
<MTFor from="0" to="$endCount">
<MTIf name="entryIfNonZero" like="$startYearForDraw">
<MTIf name="presentYear" ne="$startYearForDraw">
<li><a href="<$MTGetVar name="startYearForDraw"$>.html"><$MTGetVar name="startYearForDraw"$>年</a></li>
<MTElse>
<li><strong><$MTGetVar name="startYearForDraw"$>年</strong></li>
</MTIf>
</MTIf>
<$MTSetVar name="startYearForDraw" op="-" value="1"$>
</MTFor>
</ul>
<MTIgnore>記事出力</MTIgnore>
<MTArchiveList archive_type="Yearly" lastn="1">
<MTEntries lastn="0">
<$MTEntryTitle$><$MTEntryBody$>
</MTEntries>
</MTArchiveList>


あとは、MTForで回っている間、毎回 まとめられれば。。
あと、あと、最新年が2012の場合、「年度遷移用ページ」2012.htmlと、
「他コンテンツからの遷移用ページ」index.htmlに同一内容を書き出して対応しているので、
そこもまとめられれば。。




コメントする

トラックバックURL:http://buster-workz.com/mt/mt-tb.cgi/491


  MT 各年度遷移ナビゲーション出力 その1>

Copyright © buster-workz All rights reserved.