※この記事は7年以上前の記事です。
現在は状況が異なる可能性がありますのでご注意ください。
こんばんは。
明日早いってのに、夜にびくドン行ってしまった。
まだ寝れん・・・。
そんなデブ活のことはどうでもいくて、
表記の件、やっていこう。
やりたいと思った人は僕だけじゃないはず、新着記事順にカテゴリ別記事一覧を表示する、だ。
一応、カテゴリの並べ替えのプラグインとかあんねんけど、それだと、新着記事順に並べると、とかはできなさそうだった。
して、これまた、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を愛してますから、ええ。
ではまた。
コメントする