TopMovable TypeカスタマイズPHP化 > 2009年7月
2009年7月17日

Movable Type 4 の PHP モジュール化

July 17,2009 1:55 AM
Tag:[, , ]
Permalink

インデックステンプレートを用いて、「最近のブログ記事」や「カテゴリーリスト」などのサイドバーのリスト類について、SSI(PHP)によるモジュール化を行なう方法を紹介します。

このエントリーは、Movable Type 3 の記事「Movable Type の PHP モジュール化の仕組みについて(その3:変更方法)」を Movable Type 4 向けに全面的に書き直したものです。Movable Type 4 では、サイドバーのリスト類がテンプレートからウィジェットに移動されているので、その辺りも考慮した内容にしています。

モジュール化のメリットについては、下記のエントリーを参照してください。

なお、各ページは事前に PHP 化を行っていることを前提としています。PHP化の方法については下記の記事を参照願います。

1.ウィジェットテンプレートの変更

Movable Type 4 では、サイドバーのリスト類はウィジェットに登録されているので、まずウィジェットテンプレートを変更します。以下、「最近のブログ記事」の場合を例に説明します。

ブログ管理画面の「デザイン」→「ウィジェット」をクリック。

「最近のブログ記事」をクリック。

テンプレートの内容を全選択してコピーします。コピーした内容はメモ帳などにペーストしておいてください。

テンプレートの内容を次の内容に書き換えます。

<?php readfile("<$mt:BlogSitePath$>recent_entries.html"); ?>

青色の部分がモジュールとして呼び出すファイル名になります。ファイル名は何でもかまいませんが、ここでは recent_entries.html で作業を進めます。

書き換えた後の画面は次のようになります。

書き換えたら「保存」をクリックします。

2.モジュールの作成

次に、モジュールとなる方のテンプレートを作成します。

ブログ管理画面の「デザイン」→「テンプレート」をクリック。

インデックステンプレートの「新しいインデックス・テンプレートを作る」をクリック。

インデックステンプレート作成画面で下記の項目を設定します。

  • テンプレートの名前:最近のブログ記事
  • 出力ファイル名:recent_entries.html
  • テンプレートの内容:1項の作業でウィジェットからコピーテンプレートの内容をペースト

「出力ファイル名」は、このテンプレートを再構築した時のファイル名となります。このファイル名は、1項で設定した青色部分、

<?php readfile("<$mt:BlogSitePath$>recent_entries.html"); ?>

と必ず一致するようにしてください。

各項目を設定した後の画面は次のようになります。

あとは「保存」をクリックして、「このテンプレートを再構築する」のリンクをクリックし、作成したテンプレートを再構築してください。

あとは、全体を再構築して、リストが正常に表示されることを確認してください。

3.「最近のブログ記事」以外のリストをモジュールで利用する場合

モジュール化したいリストについて、1~2項の手順を繰り返します。その際、出力するファイル名を次のように変更してください。

  • 最近のコメント:recent_comments.html
  • 最近のコメント:recent_trackbacks.html
  • カテゴリーリスト:categories.html
  • 月別アーカイブリスト:monthly.html

必ずこの名称にしないといけないわけではなく、1項で設定した青色部分のファイル名と、2項で設定した出力ファイル名が一致していればOKです。

また、リスト類以外の検索フォームなど、テンプレートタグを使っているものについても、モジュール化しておけば再構築の負荷を減らすことができます。

4.システムテンプレートでもモジュールを利用する場合

「コメントプレビュー」や「検索結果」などのシステムテンプレートから、作成したモジュールを呼び出すときは、「最近のブログ記事」の場合、1項のウィジェットの内容を次のように修正します。

<mt:If name="system_template">
<$mt:Include file="recent_entries.html"$>
<mt:Else>
<?php readfile("<$mt:BlogSitePath$>recent_entries.html"); ?>
</mt:If>

青色部分のファイル名が一致するようにしてください。

以上です。

Comments [2] | Trackbacks [0]
2009年7月16日

Movable Type 4 の PHP化

July 16,2009 12:55 AM
Tag:[, ]
Permalink

Movable Type 4 で出力するページをPHP化する(=拡張子を .php にする)カスタマイズを紹介します。

Movable Type には何種類かのテンプレートがあり、PHP化の対象は「インデックステンプレート」と「アーカイブテンプレート」の2つです。

このエントリーは、Movable Type 3 の記事「Movable Type の PHP化(その1)」をMovable Type 4 向けに修正したものです。

1.インデックステンプレートの拡張子を変更する

デフォルトテンプレートの場合、インデックステンプレートでPHP化を行なうのは「メインページ」と「アーカイブインデックス」の2つです。ここではメインページをサンプルに説明します。

ブログ管理画面の「デザイン」→「テンプレート」をクリック。

ブログ管理画面から「デザイン」→「テンプレート」をクリック

「メインページ」をクリック。

テンプレート一覧画面からメインページを選択

「テンプレートの設定」をクリック。

テンプレート編集画面から「テンプレートの設定」をクリック

「出力ファイル」を index.html から index.php に変更します。変更後は「保存」をクリックします。

出力ファイル名の変更

アーカイブページもメインページと同様の手順で archives.html から archives.php に変更します。

テンプレート一覧画面からアーカイブページを選択

2.アーカイブテンプレートの拡張子を変更する

ブログ管理画面の「設定」→「公開」をクリックします。

ブログ管理画面から「設定」→「公開」をクリック

「アーカイブオプション」の「ファイルの拡張子」の内容を html から php に書き換え(ピリオドは不要)、下にある「変更を保存」をクリックします。

「アーカイブオプション」の「ファイルの拡張子」の内容を変更

この設定を行なうことで、MovableType の全てのアーカイブページの拡張子は .php に変更されます。

※「カスタム」設定を行なっていない場合、以下の内容はスキップして3項の作業に進んでください。

なお、アーカイブテンプレートのパスを「カスタム」設定で拡張子に .html を設定している場合、本項の設定が反映されません。

「カスタム」以外を選択している場合(2項の設定で拡張子が自動的にphpに変更)
「カスタム」以外を選択している場合

「カスタム」を選択して、拡張子を直接設定している場合
「カスタム」を選択して、拡張子を直接設定している場合

上記のように直接設定している場合は、パスに記述した拡張子 .html を %x に書き換えます。2項の設定により、%x は自動的に .php に読み替えられてページを出力します(このフィールドの %x が .php に書き変わるわけではありません)。

パスを%xに書き換え

3.XML宣言の修正

※デフォルトテンプレートではこの作業は不要です。

ページの先頭に、

<?xml version="1.0" encoding="<$MTPublishCharset$>"?>

がある場合、拡張子を .php にして表示すると、ページが真っ白になるか

Parse error: parse error, unexpected T_STRING in [...] on line 1

というようなエラーが表示されます。これはXML宣言がPHPとして誤解釈されてしまうための事象です。

これを回避するには、ご利用のテンプレートに記述されている XML宣言を削除するか、

<? echo('<?xml version="1.0" encoding="<$MTPublishCharset$>"?>') ?>

とPHPが解釈可能なフォーマットに変更してください。どのテンプレートに書かれているか分からない場合は、管理画面の「デザイン」→「テンプレート」でテンプレート一覧画面を開いたときに右上にある検索フィールドで「xml version」で検索するとよいでしょう。

検索フィールド

なお、XML 宣言を各ページで利用している場合、システムテンプレートで不具合が発生する可能性があります。不具合の内容や対処の詳細については下記の記事をご覧ください。

Movable Type 4 で PHP 化する時の注意事項

4.ファイル・ディレクトリのパーミッション変更

※本設定の要否や設定内容はサーバによって異なります。

PHPファイルが実行ファイルとして動作するように、再構築で生成されるディレクトリおよびファイルのパーミッションを変更する必要があります。パーミッションを変更するには Movable Type をインストールしたディレクトリにある mt-config.cgi をダウンロードし、任意のエディタで編集します。

「さくらのインターネット」の場合、mt-config.cgi の最後に、下記の3行を追加します。

HTMLUmask 0022
DirUmask 0022
HTMLPerms 0777

編集後、mt-config.cgi を元のディレクトリに上書きアップロードします。

なお、この設定項目は一意に決まるものではなく、レンタルサーバによって設定値が異なる可能性があります。あるいは、本項の変更自体が不要な場合もあります。

HTMLPerms は、perl の sysopen の第4パラメータ、つまり PHP ファイル作成時のファイルパーミッションを設定する環境変数です。

XXUmask は、Movable Type 内部から Linux の umask コマンドを実行する時の引数となります。HTMLUmask はファイル作成時のマスク、DirUmask はディレクトリ作成時のマスクです。umask の機能については下記を参照ください。

5.再構築とページ確認

全体を再構築します。再構築が完了したら PHP化されたページが正常に表示されることを確認してください。この時点では .html のページが残っているので、メインページであればURLの末尾に index.php を付与して、PHPのファイルに直接アクセスしてください。

6.ファイルのリダイレクト

※リダイレクトが不要な場合はこの作業をスキップしてください。

各アーカイブページについて、.htaccess を用いて旧ファイル(html)から新ファイル(php)へのリダイレクトを行います。リダイレクトを利用すれば、外部からリンクされてしまっている旧ファイルへのリンクを、新ファイルへ転送することができます。

設定の詳細は「.htaccess によるリダイレクト」を参照ください。

7.不要ファイルの削除

ブログディレクトリ(メインページがあるディレクトリ)およびその配下にある .html のファイルを削除します。Movable Type には拡張子の変更により .html のファイルを削除する機能はありませんので、FTPツールあるいは TeraTerm 等を利用し、ファイルを手動で削除します。

.html のファイルを削除する理由は次の通りです。

HTTPサーバの設定にもよりますが、一般的にURLが "/" で終わる場合、サーバは最初に、そのディレクトリの index.html を探すようになっています。当サイトの場合、

http://www.koikikukan.com/

をブラウザに指定して実行した場合、HTTPサーバは

http://www.koikikukan.com/index.html

を一番最初に検索します。index.html が存在しない場合は次候補の index.htm や index.php 等を検索する、という仕組みになっています。
したがって、拡張子を変更しただけでは新しく作った index.php にアクセスされない可能性があります。「可能性がある」と書いたのは、URLに index.php まで指定すれば当然アクセスできるからです。

archives.html については、実際にはURLに archives.php まで設定するためアクセス上は問題ありませんが、削除することを推奨します。*1

参考までに、この「ファイルを検索する」という設定は Apache HTTP サーバの「DirectoryIndex ディレクティブ」で行います。

DirectoryIndex ディレクティブ

このディレクティブに記述されたファイルがひとつもみつからない場合はそのディレクトリのファイルリストが表示される、という仕組みになっています。

アーカイブページの .html ファイルの削除については、「アーカイブの設定」の有無によって、アーカイブディレクトリの位置が異なります。

7.1 「アーカイブをサイトパスとは別のパスで公開する」を行っている場合

ブログ管理画面の「設定」→「公開」にある「アーカイブをサイトパスとは別のパスで公開する」をチェックしていれば、アーカイブディレクトリを丸ごと削除しても構いません(ただしPHPファイルも消えてしまうので、すぐに再構築してください)。

ただし画像ファイルなどをこのでぃれっクトリにアップロードしている場合はこの作業を行なわず、手作業で .html ファイルを削除してください。

7.2 「アーカイブをサイトパスとは別のパスで公開する」を行っていない場合

「アーカイブをサイトパスとは別のパスで公開する」をチェックしていない場合は、ブログ管理画面の「設定」→「公開」にある「サイトパス」配下にアーカイブ用のディレクトリ(下記)が作成されているので、そのディレクトリを丸ごと削除しても構いません(ただしPHPファイルも消えてしまうので、すぐに再構築してください)。

アーカイブごとにディレクトリ名は概ね次のようになります。なお、「アーカイブマッピング」の設定によってディレクトリ名は異なるので参考程度にしてください。

  • 年別/月別/週別/日別アーカイブ:「年(「2009」等)」ディレクトリ
  • カテゴリ(+日付含む)アーカイブ:「catX」ディレクトリ
  • ユーザー(+日付含む)アーカイブ:「author」ディレクトリ

ディレクトリを丸ごと削除する場合、削除するディレクトリ配下に手動でアップロードしているようなファイルがないことを確認してから行なってください。


*1:旧ファイルを削除する理由は、もし削除しなければ同じ内容のファイルが2つ存在することになります。内部リンクから旧ファイルへのアクセスがなくても、外部からのリンク等が残っている場合、検索エンジンのクロール対象となり、ペナルティを受ける可能性があるためです。

Comments [7] | Trackbacks [3]
Now loading...
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner


AMN
Categories
Monthly Archives
2017年
2016年
2015年
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
2003年
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
Powered by
Movable Type 6.0.3