MovableTypeで全ての記事を完全に更新日時順に並べて表示する方法

このページを見に来た人はよくわかっていると思いますが、MTでmt:Entries のブロックタグで例えば、テンプレートタグリファレンスに従って、更新日時順にトップページに表示したいと思ったら以下のように記述しますよね?

<mt:Entries sort_by="modified_on" lastn="20">
 <mt:EntriesHeader>
 <ul>
 </mt:EntriesHeader>
   <li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li>
 <mt:EntriesFooter>
 </ul>
 </mt:EntriesFooter>
</mt:Entries>

でも、これだと最近投稿した記事の中での更新順になってしまう。
そう、例えば一年前など過去に投稿したものを修正して更新したものは浮上してこない仕様なのです。
普通のブログ記事ならそれでもいいと思いますが、情報公開系なサイトなどでは記事を更新したらトップページにも持ってきてお知らせしたい!っていう場合がありますよね。そういう時はもうSQLToolsプラグインを使って対応しましょう。

手順1

SQLToolsプラグインをインストールします。

手順2

SQLクエリで新規に以下のものを入れます。

SQLクエリの名前:トップページ更新順に並べ替え

SQLクエリ:

SELECT `entry_id`
  FROM
    `mt_entry`
  WHERE
    `entry_class` = 'entry'
  AND
    `entry_status` = '2'
  AND
    `entry_blog_id` = '1'
  ORDER BY
    `entry_modified_on` DESC
  LIMIT 20;

※LIMITは表示する記事リンクの数なので、適宜変更してください。

手順3

メインページのmt:entriesの箇所を以下のように変更します。

<mt:SQLObjects name="トップページ更新順に並べ替え" type="entry">
 <mt:EntriesHeader>
 <ul>
 </mt:EntriesHeader>
  <li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li>
 <mt:EntriesFooter>
 </ul>
 </mt:EntriesFooter>
</mt:SQLObjects>

この例は元々MTにある更新日時を使用していますが、カスタムフィールドで新たに日時を作って、それを基に並び替えることもできます。
例えば、MT標準の更新日時順で並び替えると、ただ単純に誤字脱字の修正などでもトップページに上がってきてしまいますが、自分で作ったカスタムフィールド値をもとにしておくと、トップページに上げたいタイミングで操作できるのでこっちのほうが便利かもです。

その場合の手順も一応説明しておきますと、

手順1

カスタムフィールドでシステムオブジェクトを「記事」、オプションを「日付と時刻」、ベースネームを「newlyupdate」としたものを作成する。

手順2

SQLクエリで新規に以下のものを入れます。

SQLクエリの名前:トップページ更新順に並べ替え

SQLクエリ:

SELECT `entry_id`
  FROM
    `mt_entry` E
  INNER JOIN
    `mt_entry_meta` M
  ON
    E.entry_id = M.entry_meta_entry_id
  WHERE
    `entry_class` = 'entry'
  AND
    `entry_status` = '2'
  AND
    `entry_blog_id` = '1'
  AND
    `entry_meta_type` = 'field.newlyupdate'
  ORDER BY `entry_meta_vdatetime_idx` DESC
  LIMIT 20;

※LIMITは表示する記事リンクの数なので、適宜変更してください。
あとは上記の手順3と同じです。
まあ、SQLToolsプラグインはこのように何でもできてしまうので凄く便利。活用次第でWebサイトをいくらでも充実させることができます。