並べ替えのキーは「sort_by」属性で指定します。
書式は
タグの名前に指定できるのは
title=エントリーのタイトルで並べ替え
status=エントリーの状態(下書き/公開)で並べ替え
modified_on=エントリーの更新日で並べ替え
author_id=投稿者で並べ替え
excerpt=エントリーの概要で並べ替え
この5種類です。
しかし、一度投稿したエントリーを修正したり、追加をしたりすることがあるのですが、その場合「投稿日」並べ替えをした場合、上位に表示されないんですね。
修正、追加などをしたら、それも更新履歴としてトップページやナビゲーションに目立つように表示がしたい...というか、委託で作ったサイトでリクエストされました。
最初に思いつくのが「sort_by」属性で「modified_on」の指定ですよね。
しかし、これだとうまくいきません。
「更新したのに反映されないじゃないか!!」とお叱りを受けました。
どうしたらいいものかとGoogleで検索して探したら以下の記事を見つけました。
MTで記事を更新順に並べ替える[Global Listings]
こちらは「Global Listings」というプラグインを使った方法です。
「Global Listings」についてはこちらを参考にしてください。
Movable Type プラグインディレクトリ
もう一つは
エントリーを更新順にソートする〜更新リストの作り方
こちらは、「Counter」プラグインを利用する方法です。
「Counter」プラグインについては、こちらエムロジック放課後プロジェクト
僕は、「Counter」プラグインを利用する方法を参考に致しました。理由はですね、上記のブログ「エントリーを更新順にソートする〜更新リストの作り方」にも書いていますが、おそらく「Global Listings」を利用する方法では、誤字・脱字の修正などでエントリーの再構築を行った場合も、表示順序が上がってしまうからです。
それを回避する方法も上記のブログ「エントリーを更新順にソートする〜更新リストの作り方」に書かれています。
以下引用です。
上の方法だと誤字・脱字の修正などどうでもいい内容でも上がってきてしまいます。内容に意味のある変更があった場合のみ表示させたい場合は、エントリーに何らかの目印をつけて、目印のあるエントリーのみをソートの対象にするといいです。「なるほど」と思ったんですが、「@更新をエントリータグに入れた記事をその後誤字脱字などでどうでもいい修正をした場合に、上に上がって欲しくないのに上がってきてしまうなぁ」と思ったのです。
一例として3.3から追加された「エントリータグ」を利用してみました。
修正時に「これは上げたい」と思うエントリーにのみ「@更新」というタグを付けます。タグ名の最初に@を付けるとプライベートモードになり、タグクラウドなどには出てこなくなるので他のタグの邪魔にもならないと思います。
もちろん、本当の更新をしたのが更新履歴一覧から除外されるくらい前ならば、「@更新」を外せばいいのだけど、まだ一覧に残っているときは、本当の更新ではなくて誤字脱字の修正で履歴のトップに上がってくるのは避けたい。
依頼を受けたサイトは、だいぶん落ち着いてきて、エントリーの追加があまり頻繁でないので、上記のようなことが起こり得るわけです。(しかも、またお叱りを受けます)
それで、僕が取った方法は、「エントリーを更新順にソートする〜更新リストの作り方」を参考にして、エントリータグに「@更新」ではなくて、概要に書式を決めて日付を入力してそれで並べ替えることにしました。
例えば、概要に「H19/09/08 更新」という風に更新した日付を入力します。ここで、年月日の書式は「H19/9/8」にしないこと。
これだと「H19/10/1」の方が後に表示されるようになるからです。
それで作ったコードがこれです。
<ul>
<MTCounter>
<MTEntries lastn="500" sort_by="excerpt">
<$MTCounterPlus$>
<MTCounterIfLess value="11">
<MTIfNonEmpty tag="EntryExcerpt">
<li><a href="<$MTEntryLink$>"><$MTEntryTitle$></a> <$MTEntryExcerpt$> (<$MTEntryCategory pmhc=""$>)</li>
</MTIfNonEmpty>
</MTCounterIfLess>
</MTEntries>
</MTCounter>
</ul>
<MTCounter>
<MTEntries lastn="500" sort_by="excerpt">
<$MTCounterPlus$>
<MTCounterIfLess value="11">
<MTIfNonEmpty tag="EntryExcerpt">
<li><a href="<$MTEntryLink$>"><$MTEntryTitle$></a> <$MTEntryExcerpt$> (<$MTEntryCategory pmhc=""$>)</li>
</MTIfNonEmpty>
</MTCounterIfLess>
</MTEntries>
</MTCounter>
</ul>
<MTIfNonEmpty tag="EntryExcerpt">で概要に何も記入していないエントリーは表示しないように条件分岐をしています。
しかし、これがうまくいかない。
概要に記述がない場合、<$MTEntryExcerpt$>はエントリーの本文を、ブログの設定で指定した概要の文字数だけ先頭から表示するのです。
ですので、<MTIfNonEmpty tag="EntryExcerpt">で「概要は空でない」と判断されて、表示したくないエントリーも一覧に表示されてしまいます。しかも、本文の先頭つきで。
これを解決したのがこちらhttp://q.hatena.ne.jp/1177037454
Movable Typeのプラットフォームで
基本の設定>全般>表示に関する初期設定にある「概要にいれる文字数」を0にすると良いと書いてあります。
記事を見ると質問者はできなかったと書いてますが、ダメ元でやってみたらできました。
まだ、運用をしていないのでなんとも言えません。
実際に運用をすると、また不具合やさらなるリクエストが来るかもしれません。
これを使ったサイトは「更新作業を僕がしたくないので、HTMLを知らない人でも記事の更新ができるように」ということでMovable Typeを使って構築したのですが、やはりMovable Typeは基本はブログツールでCMSツールではないですね。
プラグインを導入することで、力技でできないことはないのですが、やはり苦労します。
参考にさせていただいたブログの方、どうもありがとうございました。
大変助かりました。