記事書かなくなって半年以上。
続き書きます。

自分の試行錯誤を含め記事にしたほうが、記事として自分に残るのであえて過程を含め記事にしています。
悪しからず。


前回記事 MT 年度別の記事一覧出力 本文出力編


● 各年度遷移ナビゲーション出力 メインページ/ブログ記事リスト 共通
仕様:
・各年度一覧遷移のナビゲーション。
・現在のページは、カレント表示。その際は自ページへのリンクはナシ。
・未来の年度の記事が作成された場合も、動作するようにする。
・該当年度の記事がない場合は非表示。

動作イメージ
--------------------------------
「2012年度の記事が最新、現在は2012.html」
> 2012年  ←カレント表示
> 2011年
> 2010年
--------------------------------
「2013年度の記事が最新、現在は2012.html」
> 2013年
> 2012年  ←カレント表示
> 2011年
> 2010年
--------------------------------
「2013年度の記事が最新、現在は2010.html。2011年の記事は無い」
> 2013年
> 2012年
> 2010年  ←カレント表示
--------------------------------

● MTテンプレートへの記述 定義

<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>

1行目・・・
全エントリの中から最新年度の記事の年数を取得、定義。
2行目・・・
1行目定義の逆順で、全エントリの中から最古年度の記事の年数を取得、定義。
3行目・・・
現在ページの年度を取得、定義。

アーカイブページ内では、MTEntriesの動作がそのページのみになる。
[デフォルト:2010年アーカイブページ内で最新記事年度として取れる値は(2012年の記事があっても) 2010]
なので、」MTArchiveListのarchive_type というモディファイアを使用して、全ページ中から最新記事情報を取得する。
※ MTSetVarBlock内に改行があると、改行込みの値となり、正確な値として取れないので一行で書ききる。
参考<http://www.h-fj.com/blog/archives/2009/10/27-091727.php>


● MTテンプレートへの記述 MTIf文(カレント表示の切り替え)

<ul>

<MTIf name="newestYear" ge="2013">
<MTIf name="presentYear" ne="2013">
<li><a href="2013.html">2013年</a></li>
<MTElse>
<li><strong>2013年</strong></li>
</MTIf>
</MTIf>

<MTIf name="newestYear" ge="2012">
<MTIf name="presentYear" ne="2012">
<li><a href="2012.html">2012年</a></li>
<MTElse>
<li><strong>2012年</strong></li>
</MTIf>
</MTIf>

<MTIf name="newestYear" ge="2011">
<MTIf name="presentYear" ne="2011">
<li><a href="2011.html">2011年</a></li>
<MTElse>
<li><strong>2011年</strong></li>
</MTIf>
</MTIf>

</ul>

<IF① もし最新年度の値newestYearが2013以上だったら以下を表示>
 <IF② もし現在ページの年度の値presentYearが2013と一致しなかったら以下を表示>
  <li><a href="2013.html">2013年</a></li>
  <Else それ以外(一致した場合)は以下を表示>
  <li><strong>2013年</strong></li>
 </IF②>
</IF①>

問題:冗長。例えば10年分これ書く気?

● MTテンプレートへの記述 上記MTIf文をMTfor文で繰り返す
冗長になってしまいそうだったので、最古年度 to 最新年度のループで回してみます。

<ul>
<MTfor var="x" from="$oldestYear" to="$newestYear">
<MTIf name="newestYear" ge="$x">
<MTIf name="presentYear" ne="$x">
<li><a href="<$MTGetVar name='x'$>.html"><$MTGetVar name='x'$>年</a></li>
<MTElse>
<li><strong><$MTGetVar name='x'$>年</strong></li>
</MTIf>
</MTIf>
</MTfor>
</ul>

<MTfor var="x" from="$oldestYear" to="$newestYear"> ←最古年度から最新年度までをループ

MTIfの部分を、
<MTIf name="newestYear" ge="<$MTGetVar name='x'$>">とは書かず、
<MTIf name="newestYear" ge="$x">と書く理由。

<$MTGetVar name='x'$>という記述は、
「$xを出力する」、という意味なので、そのままMTIf内で使うと破綻してしまう。

<MTIf name="newestYear" ge="<$MTGetVar name='x'$>">
↑はphpだとこんな感じ?↓
<?php if($newestYear > <?php echo $x?>) ?>

<MTIf name="newestYear" ge="$x">
↑はphpだとこんな感じ?↓
<?php if($newestYear > $x) ?>

ちなみに、[MTSetVar]、[MTGetVar]は[MTVar]と置き換え可能みたいですが、
定義と出力を視覚的に分かりやすくするために[MTVar]は使っていません。

問題:出力される並び順が想定とは逆になってしまう
記事がある年度が 2012年 2011年 2010年の場合、
--------------------------------
> 2010年
> 2011年
> 2012年
--------------------------------

申し訳ありません。続きます。




コメントする

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


<MT 各年度遷移ナビゲーション出力 その2  MT 年度別の記事一覧出力 本文出力編>

Copyright © buster-workz All rights reserved.