印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
MovableType MT 2.661 の動的生成ページで PHP を使うには

Movable Type 2.661 の動的生成ページ内で PHP を使えるようにする。MT 3 用ではないが,参考にできる点もある。

■ ■ ■

再構築の時間を短縮するための1つの方法に,ダイナミックパブリッシングがある。表示する際に動的に構築をするというものだ。ダイナミックパブリッシングは MT 3 以降は正式サポートされているが,MT 2.661 には正式なサポートはない。しかし正式サポートではないものの,ダイナミックパブリッシング用の CGI が提供されているので,使うことはできる。

MT 3 用のダイナミックパブリッシングは CGI による実装ではないので,以下のような回りくどい方法は不要だと思われる。

mt-view については,mt-view.cgiを使ってみる - Ogawa::Memoranda で詳しく解説されており,さらにパッチまで公開されている(mt264-mtview.patch - Ogawa::Memoranda)。もう4年も前の記事だとは…(遠い目)。

  • Main Indexを生成する
    http://www.mysite.tld/mt/mt-view.cgi/BlogId
  • Daily Archiveを生成する (YYYYMMDD日)
    http://www.mysite.tld/mt/mt-view.cgi/BlogId/archives/YYYY/MM/DD/
  • Monthly Archiveを生成する (YYYYMM月)
    http://www.mysite.tld/mt/mt-view.cgi/BlogId/archives/YYYY/MM/
  • Weekly Archiveを生成する (YYYYMM月第NN週)
    http://www.mysite.tld/mt/mt-view.cgi/BlogId/archives/week/YYYY/MM/NN/
  • Entryを生成する
    http://www.mysite.tld/mt/mt-view.cgi/BlogId/entry/EntryId/
  • Category Archiveを生成する
    http://www.mysite.tld/mt/mt-view.cgi/BlogId/section/CategoryId/

EntryID は「846」のような形でも,ゼロでパディングした「000846」のような形でもよい。

ダイナミックパブリッシングは,本格的に導入しなくても,試験的に使うだけでもご利益はある。純粋にそのページだけを再構築する時間が分かるからである。通常の再構築では,前後の記事やアーカイブなどの再構築も同時に行われるが,mt-view.cgi ではその対象となるページだけが再構築されるだけなのだ。本格的に導入して使い物になるかどうかの材料になる。

さて,次は本題で,動的生成ページで PHP を使う話。mt-view.cgi は CGI なので,表示するページに PHP のコードがあっても PHP では処理されない。PHP のソースがそのまま表示されることになる。PHP で処理させるには,mt-view.cgi を別の静的生成ページから読み込むようにすればよい。この方法は Al-Muhajabah's Movable Type Tips: dynamically-generated individual archive pages で解説されている。

動的ページ用に別のテンプレートを適用できるようにするためハック

まず,動的ページ用に別のテンプレートを適用できるようにするためのハックを行う (MT Extensions: Custom Dynamic Pages 1.2)。このハックを行うと,動的生成ページへのアクセスにテンプレートを指定できるようになる。

  • Entryを生成する
    http://www.mysite.tld/mt/mt-view.cgi/BlogId/entry/EntryID/
  • 別テンプレート(テンプレート名: Template) でEntryを生成する
    http://www.mysite.tld/mt/mt-view.cgi/BlogId/entry/EntryID/Template

この2つのアクセス方法のうち,動的生成ページに使うのはテンプレート名を指定する方である。テンプレート名を指定しない方は,静的生成ページで使うので動的には使わない。

個別記事アーカイブの新規作成と削除

次に,個別記事を静的に生成するアーカイブテンプレートを作る。テンプレート名は例えば「Dynamic Individual Entry Archive」とする。内容には,次の PHP のコードだけを書いておく。

<?php
include('<$MTCGIPath$>mt-view.cgi/<$MTBlogID$>/entry/<$MTEntryID$>/iea');
?>

このアーカイブは,ブログの設定で「Individual」アーカイブと関連付けをしておく。

さらに,動的生成ページ用のアーカイブテンプレートを作成する。テンプレートの名前は「iea」とする。iea は「Individual Entry Archive」の頭文字をとったもので,名前は何でもよいが,上の PHP のコードに書いたテンプレート名と合わせておく必要がある。内容は,静的ページ生成用に使っている「Individual Entry Archive」の内容をそのままコピーして貼り付ければよい。このアーカイブテンプレートについては,Individual アーカイブとの関連付けをしないというのがポイントである。

静的ページ生成に使っている「Individual Entry Archive」は,思い切って削除してしまう。削除しないと,最初に作った「Dynamic Individual Entry Archive」とファイル名が衝突してしまう。

これで再構築すれば完了である。

まとめ

これで,個別記事の中に書いた PHP のコードが処理されるようになる。ポイントは,表示用の静的生成ページでは PHP が有効であり,その中で動的ページを読み込んでいるため,動的ページ内に PHP コードがあっても処理されるということである。

とは言うものの,この方法を解説している Al-Muhajabah's Movable Type Tips: dynamically-generated individual archive pages には,次の追記がある:「この設定で2年間問題なく使えていたが,mt-view.cgi がサーバ資源を使いすぎるため,動的ページ生成はやめて静的ページ生成に切り替えた」。MT 2.661 では,一度生成した動的ページをキャッシュする機能がないため,現実的ではないということだろう。

これにならい,このサイトでもダイナミックパブリッシングは行わない。考え方は分かったので,動作の確認に留めることにした (え〜って言うな)。

以上は MT 2.661 の話だが,MT 3 にも使えそうな話題もある。動的生成ページに別テンプレートを適用するハックで,印刷用ページの作成ができるというものだ(MT Extensions: Custom Dynamic Pages 1.2)。

このサイトでは,CSS の追加読み込みで印刷用ページの表示を行っているので(nlog(n): 印刷用ページを作るには),不要な要素を非表示にするくらいしかできないが,動的ページ生成を行えばレイアウトを自由に変えることができる。

Posted by n at 2007-03-19 23:22 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?