こんばんは。
明日早いってのに、夜にびくドン行ってしまった。
まだ寝れん・・・。
そんなデブ活のことはどうでもいくて、
表記の件、やっていこう。
やりたいと思った人は僕だけじゃないはず、新着記事順にカテゴリ別記事一覧を表示する、だ。
一応、カテゴリの並べ替えのプラグインとかあんねんけど、それだと、新着記事順に並べると、とかはできなさそうだった。
して、これまた、Movable Type(以下MT)だけじゃめんどくさい難しいと思ったので、
例のごとく、PHPとの合わせ技です。
まずは、PHP変数に、MTのループを使って情報を入れていく。
<MTIgnore>PHPスクリプト内で、カテゴリループを出す</MTIgnore>
<?php
// カテゴリ一覧用変数
$categoriesArr = array();
<MTTopLevelCategories><MTIgnore>カテゴリ毎ループを実行</MTIgnore>
<mt:Entries lastn="3">
<mt:EntriesHeader>
<MTIgnore>EntiesHeaderを使い、一記事目(最新記事)の日時を取得、PHP変数にタイムスタンプとして挿入</MTIgnore>
<$mt:EntryDate format="%Y-%m-%d" setvar="entryDate"$>
$catDate = strtotime('<MTGetVar name="entryDate">');
// タイムスタンプをkeyとして、一カテゴリを定義、
$categoriesArr[$catDate] = array(
'catTitle' => '<mt:CategoryLabel>',
'catLink' => '<$mt:CategoryArchiveLink$>',
'catDiscription' => '<$MTCategoryDescription nl2br="xhtml"$>',
// 記事一覧を配列として持っとくためにプロパティ定義
'entries' => array()
);
</mt:EntriesHeader>
<MTIgnore>ここからカテゴリ別記事ループ。情報を入れていく</MTIgnore>
$categoriesArr[$catDate]['entries'][] = array(
'title' => '<$mt:EntryTitle$>',
'link' => '<$mt:EntryPermalink$>'
);
</mt:Entries>
</MTTopLevelCategories>
// 最後に、配列をkeyでソート(降順ソートなので、一番最新の記事(タイムスタンプが大きい)順になる)
krsort($categoriesArr); ?>
みそなのは、PHP配列変数のkeyをカテゴリ毎の最新記事のタイムスタンプとしていること。
こうすれば、あとで、PHP上で並べ替えがしやすい。
これで、カテゴリ別記事一覧の、PHP配列変数が用意できた。
あとは出力。
<?php foreach($categoriesArr as $catValue) { ?>
<article>
<h1><a href="<?php echo $catValue['catLink']; ?>"><?php echo $catValue['catTitle']; ?></a> 記事一覧</h1>
<ul>
<?php foreach($catValue['entries'] as $catEntry) { ?>
<li>・<a href="<?php echo $catEntry['link']; ?>"><?php echo $catEntry['title']; ?></a></li>
<?php } ?>
</ul>
</article>
<?php } ?>
これで、新着記事順のカテゴリ別記事一覧ができたはず。
これ、MTだけでできれば、もっとカッコいい、というか、サーバー負荷少ないのできるんだけど、
MTLoopとか使うんかね。
ちょっと、MTLoopもそうだけど、MTの辞書型変数とかできないかとか探してもなかなか出なくて・・・。
あきらめて、PHP使っタヨ・・・。
ここまで、PHP使うなら、WordPressにしろって?
いやいや、僕はどんな痛くて使いづらくてもMTを愛してますから、ええ。
ではまた。
コメントする