Movable Type、新着記事順カテゴリ別記事一覧(PHP使用)

謎のプリン語る。
プログラミングの役立つ情報とか、どうでもいい雑談とか書いてます。
一人書く人増えました。

Movable Type、新着記事順カテゴリ別記事一覧(PHP使用)

2017年04月08日

みやびプリン 500 316

500 320

Movable Type、新着記事順カテゴリ別記事一覧(PHP使用) - サムネイル

※この記事は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を愛してますから、ええ。

ではまた。

トラックバック(0)

トラックバックURL:

コメントする

ページトップへ戻る