Movable Typeの記事詳細ページ内で最新記事の情報を表示しようとして詰まったことのメモ。
問題点
最新の記事を表示したい場合、MtEntriesを使うことで表示できます。
<h2>最近投稿した記事</h2> <ul> <mt:Entries lastn="3"> <li><a href="<$mt:EntryLink$>"><$mt:EntryTitle$></a></li> </mt:Entries> </ul>
表示はこれで問題なかったのですが、実際に記事を投稿してみたところ、最新記事(投稿した記事)とそのひとつ前の記事にか最新記事が更新されていませんでした。
記事を投稿した場合には、投稿したその記事とそのひとつ前の記事のみ再構築され、それ以前の記事は再構築されないようです。
対応方法
色々考えたりググったりしましたが、以下の3つの方法があると思います。
管理画面上から記事アーカイブページを再構築する
管理画面上からテンプレートなどの区切りで再構築を行えるので、記事を投稿するたびに再構築を行う方法です。
実装するのは一番楽な方法ですが、運用するうえでこの方法で問題ないかの検討は必要です。
最新記事部分をJavaScriptを使って動的に表示する
大抵の場合は記事一覧ページを用意していると思うので、その一覧ページから最新記事の情報を取得して表示する方法です。
もしくは記事一覧のjsonファイルを生成するようにして、そこから情報を取得する形でも良いかと思います。
インデックステンプレートに最新記事用のファイルを作成して、SSIを使って読み込む
記事投稿時にインデックステンプレートは再構築されるようなので、インデックステンプレートに最新記事部分のみを出力するファイルを作成して、その部分をSSIで読み込む方法です。
例えば、インデックステンプレートにrecent-article.htmlというファイル名で出力されるようにテンプレートを作成します。
recent-article.html
<ul> <mt:Entries lastn="3"> <li><a href="<$mt:EntryLink$>"><$mt:EntryTitle$></a></li> </mt:Entries> </ul>
記事詳細ページのテンプレート内で読み込むようにします。
<h2>最近投稿した記事</h2> <!--#include virtual="/recent-article.html"-->
これで記事投稿した時にrecent-article.htmlが再構築され、各記事詳細ページに最新の記事が表示されるようになりました。
SSIを使用する場合にはサーバによっては設定が必要になる場合がありますのでご注意ください。
もし記事詳細ページの拡張子がPHPの場合、同様の方法でPHPでインクルードするという方法も良いかもしれません。
【参考サイト】
コメントが承認されるまで時間がかかります。