Movable Type 備忘録

 ブログの最終更新日付を表示する

こんにちわ^^

ブログの最終更新日付を動的に表示するにはどうしたらできますか・・・というご質問を頂いたので、記事にしてご紹介します。

MovableType(ムーバブルタイプ)のデータベースにはたくさんのテーブルとよばれるものが作成されています。 このテーブルにはブログに関するデータやエントリに関するデータ、コメントに関するデータなどがそれぞれ格納されています。

- 2007.02.09 追記 -

  1. <$MTInclude file="<$MTBlogURL$>site-lastupdate.html"$>

上記の<$MTInclude$>タグの件ですが、<$MTInclude$>内に<$MTBlogURL$>タグ(http://から始まるURL)は使えませんでした。ですので、正しくは以下のようになります。

  1. index.htmlと同じ場所にsite-lastupdate.htmlを作成した場合
  2. <$MTInclude file="site-lastupdate.html"$>
  3.  
  4. たとえば、widget/というディレクトリの中にsite-lastupdate.htmlを作成した場合
  5. <$MTInclude file="./widget/site-lastupdate.html"$>
  6. index.htmlがある場所を起点にした相対パス or 絶対パスで指定します。

以上です。
TAEKO さん、補足ありがとうございます (m;_ _)mペコ

- 2007.02.08 追記 -

もっとカンタンにブログの最終更新日を表示する方法ありました。
WingMemoさんでブログの最終更新日付を表示する(ダイナミック版)という記事が紹介されてます。

TAEKO さんの記事見るまで<$MTDate$>タグの存在を忘れてましたの。ありがとうございます。
TAEKO さんのサイトではダイナミック・パブリッシングについての記事をメインに書かれてますのですっごく参考になると思いますよ( ̄∇ ̄)/

で、肝心のブログの最終更新日ですが、<$MTDate$>タグを使用します。 やっぱり新規でインデックス・テンプレートを作成( site-lastupdate.html )して、その中に以下のコードを記述します。

  1. 日本語表記( 最終更新日: 2010年5月16日 13:48 )
  2. 最終更新日: <$MTDate$>
  3.  
  4. 英語表記( Last Updated: May 16, 2010 13:48 )
  5. Last Updated: <$MTDate language="en" format="%B %e, %Y %k:%M"$>

そして、以下のコードを各テンプレート内に埋め込んでおきます。

  1. <$MTInclude file="<$MTBlogURL$>site-lastupdate.html"$>

青い字の部分を各自の環境に合わせて変更します。
<$MTDate$>タグは、このタグが記述されたページ( ここでいうsite-lastupdate.html )の更新日付を表示するためのタグです。なので、インデックス・テンプレート作成時に必ず『インデックス・テンプレートを再構築するときに、このテンプレートを自動的に再構築する』にチェックすることを忘れずに ( ̄∇ ̄)b

次にエントリの投稿・更新されたときのみ、ブログの最終更新日としたい場合には以下のようになります。

  1. 日本語表記( 最終更新日: 2010年4月 5日 23:42 )
  2. <MTEntries lastn="1">最終更新日: <$MTEntryModifiedDate$></MTEntries>
  3.  
  4. 英語表記( Last Updated: " )
  5. <MTEntries lastn="1">Last Updated: <$MTEntryModifiedDate language="en" format="%B %e, %Y %k:%M”$></MTEntries>

直近のエントリの更新日を取得しています。カンタンですね。

- 2007.02.02 追記 -

コメントやトラックバックではエントリの更新日付は変更されないようです。
すいません、わたしの勘違いでした (; ̄∇ ̄A

ここで紹介しているブログの最終更新日付は、直近に投稿されたエントリの更新日付を、ブログの最終更新日付としています。


Warning: include() [function.include]: URL file-access is disabled in the server configuration in /virtual/bzbell/public_html/archives/2007/01/31-234221.php on line 131

Warning: include(http://bizcaz.com/widget/litebox.php?url=http://bizcaz.com/image/zu/database.png&width=240&height=206&title=&noscript=0) [function.include]: failed to open stream: no suitable wrapper could be found in /virtual/bzbell/public_html/archives/2007/01/31-234221.php on line 131

Warning: include() [function.include]: Failed opening 'http://bizcaz.com/widget/litebox.php?url=http://bizcaz.com/image/zu/database.png&width=240&height=206&title=&noscript=0' for inclusion (include_path='.:/usr/local/lib/php') in /virtual/bzbell/public_html/archives/2007/01/31-234221.php on line 131

今回の主旨である、ブログの最終更新日付を表示するには、エントリに関連するデータが格納されているテーブル 'mt_entry' から、エントリの更新日付( 'mt_modified_on' )を取得することでブログの最終更新日付とすることができそうです。

エントリの更新日付は、エントリの追記などによる更新はもちろんのこと、コメント投稿やトラックバックによっても更新されてるみたいです。

では、さっそくエントリの更新日付を 'mt_entry'テーブルから取得して表示してみます。
データベースからデータを取得するにはSQLというものを使って取得します。 MovableType(ムーバブルタイプ)にはSQLプラグインというものがありまして、このプラグインを使ってエントリの更新日付を取得してみます。
SQLプラグインのインストールについては、こちらのSQLでエントリを更新された順にソートするで紹介してますので参考にしてください。

わたしのサイトの最終更新日付は以下のようになります。

Last Updated: July 18, 2007

そして、上記サンプルは以下コードで表示しています。

  1. <div>Last Updated: <MTSQLEntries query="select * from mt_entry where entry_blog_id='[MTBlogID]' and entry_status = 2 order by entry_modified_on desc limit 1"><$MTEntryModifiedDate language="en" format="%B %e, %Y"$></MTSQLEntries></div>

わたしのサイトではブログのPHP化を行っているので、上記コードをインデックス・テンプレートで作成( たとえば、site-lastupdate.php )しておいて、各テンプレート内に以下のようなタグを埋め込むことで、エントリ投稿や追記コメント投稿などによる、エントリのデータが更新されるたびに、再構築なしで自動的に最終更新日付がアップデートされるようにしております。
また、フッター部に表示している年( 2005-2007 )にも上記コードを使用して動的に更新しています。

  1. 各テンプレート内に埋め込んでおく
  2. <?php include('<$MTBlogURL$>site-lastupdate.php'); ?>

以上ざっとですが、ブログの最終更新日付の表示の仕方をご紹介しました。
では、SEE YOU♪

 Trackback Pings(0)

No trackbacks found.

 Comments(8)

#1: Posted by oscar @ February 2, 2007 [REPLY]
user-pic

bzbellさん、おひさしぶり。
>ブログの最終更新日付を動的に表示するには・・・

「ダイナミック・パブリッシングにする」ってのはNGですか?(笑)

やってみたけど、長短両方ですね。あれは。
この手のには向いてると思いますよ。

#2: Posted by bzbell @ February 3, 2007 [REPLY]
user-pic

>>1 oscar さん

こんにちわ^^

> 「ダイナミック・パブリッシングにする」ってのはNGですか?(笑)

う~ん(つω-`。)
わたしにとっては「ダイナミック・パブリッシング」の恩恵があまりなかったので今はまったく考えてないです。
サーバ負荷についても「ダイナミック・パブリッシング」しなくても回避できましたしね ( ̄∇ ̄)b
つか、「ダイナミック・パブリッシング」したら、さらに頻発しました Σ( ̄Д ̄;)!!

それに、再構築したくないという理由だけで「ダイナミック・パブリッシング」するなら、迷わずWPに乗り換えると思います。制約にしばられたくないので・・・。

WPも試しに一時使ってみましたけどわたしにはMTの方が使いやすかったし、今はスタティックのまま遊んでいきたいと思います♪

#3: Posted by TAEKO @ February 8, 2007 [REPLY]
user-pic

こんにちは。
この頁のテーマにちょっとのらせていただいたので、トラックバックを送ったのですが、何故か反映されないようなのでコメントで失礼します(それともトラックバックは承認制にされてます?)。

ダイナミックはスタティックとは違う角度からアプローチしなければいけないので、考え方の違いに慣れないと「出来ないと思われていたことが実は出来る」ことに気がつかないことも多いようです。

さくらインターネットはphpがcgiモードで動いているそうなので、スタティックの方があっているのかもしれませんね。

#4: Posted by bzbell @ February 8, 2007 [REPLY]
user-pic

>>3 TAEKO さん

こんにちわ^^

> トラックバックは承認制にされてます?

いえ。わたしからトラバはできるようなのですが、気づいたら他(TAEKO さんたち)からわたしへのトラバができなくなってるんですの。
いつからできなくなったのか分からないのですが、わたし的にはmt-tb.cgiをリネームしたことによる影響かな…と思ってます。( 未確認 )
ご迷惑をおかけしてすいません。

> さくらインターネットはphpがcgiモードで動いているそうなので、スタティックの方があっているのかもしれませんね。

CGIモードって初めて耳にしました。
TAEKO さんが言われてることが理解できなかったので、チョビッと調べてみたところ、PHPにはCGIモードとモジュールモードってのが存在するんですね。
CGIモードはセキュリティ重視、モジュールモードは処理速度重視とのこと。

さらに、さくらがPHPをCGIモードで動作させてるからPHPのパーミッションを変更する必要がある…とのことでした!!

へぇ~知りませんでした ( ; ̄▽ ̄A
勉強になります。ありがとうございます♪

TAEKO さんの記事読ませてもらいました♪
そっかぁ!! <MTDate>タグがありましたねっ!!
そっちの方が一般的ですね。見落としてました ( ; ̄▽ ̄A

記事に反映させてもらってもいいですか!?

#5: Posted by TAEKO @ February 8, 2007 [REPLY]
user-pic

お返事ありがとうございます。

>トラックバック
不思議ですね…。こちらからはエラーは出てないです。

>cgiモード
すみません、また説明不足やってしまいました(^^;。
モジュールモードだとcgiモードよりphpの動きが軽く速く負荷も少なくなるみたいです。アクセスが多い場合はWPやMTのダイナミックはモジュールモードの方がいいのかもしれませんね。

>MTDateタグ 記事に反映させてもらってもいいですか!?
もちろんです。最終更新日もいろいろバリエーション考えたりすると面白いですよね。

#6: Posted by bzbell @ February 9, 2007 [REPLY]
user-pic

>>5 TAEKO さん

> 不思議ですね…。こちらからはエラーは出てないです。

そうなんです。
わたしの別サイトからトラバして確認したのですが、エラーにならなず正常終了してるっぽいのですが、実際にはログにも残ってないんですの(つω-`。)

以前、トラックバック・スパムがひどくていろいろ試した時に何かやってしまったのかも・・・と思ってます。

#7: Posted by TAEKO @ February 9, 2007 [REPLY]
user-pic

記事参照ありがとうございます。

よろしければちょっとだけ補足を。
<$MTInclude file="xxxx"$>内では<$MTBlogURL$>(http://から始まるURL)は使えないです。
相対パスか絶対パスを使うことになりますが、読み込みたいファイルがindex.htmlと同階層にある場合は単純にfile="site-lastupdate.html"だけでいいです。
この辺私もちょっと勘違いしていたところがあったので、こちらでも記事を修正しました。
もちろんサイトの絶対パスを付けても問題ありませんが、こちらの方が簡単なので(^^;。

#8: Posted by bzbell @ February 9, 2007 [REPLY]
user-pic

>>7 TAEKO さん

こんにちわ^^

補足ありがとうございます♪

そういえば、そんな制約前にも記事にしたような、してないような(つω-`。)う~ん
<MTInclude>って最近使ってないので忘れちゃってました(; ̄∇ ̄A はは

さっそくわたしの方でも追記します♪

 Post a Comment

 

コメント用フィード