男の子の子育て・育児支援ブログ。男の子の体、しつけ、病気、気持ち(心)から相談まで。男の子子育て情報を身に付けて育児ノイローゼなんてふっとばせ!



2005年10月07日

PHPモジュール化


今回のMT改造の覚書(コピペ)をしておきます。
すべて「小粋空間」さまのおかげです!
ありがとうございます!


---------------------------------------------------------------------------------------------


PHPモジュール化をする場合の具体的な変更方法です。

1.モジュールを引き込む元となるテンプレートの変更
これはメイン・ページや各アーカイブテンプレートが対象になり、以下の作業を行います。

1.1 インデックステンプレート(メインページ等)の場合

  1. 管理メニューの「テンプレート」をクリック
  2. インデックス・テンプレート欄より該当のテンプレートをクリックし、テンプレート内部のモジュール化したい部分を切り取ってメモ帳などにペースト(切り取った位置を忘れないようにコメントでマークしておくか、先に3を実施)
  3. テンプレートから切り出した部分を <?php readfile("filename"); ?> に置き換え(filenameについては2、3項を参照)
  4. 出力ファイル名の拡張子を .php に変更
  5. 保存・再構築
  6. .htaccess対処(必要に応じて)
  7. 拡張子が .html で配置されている旧ファイルを削除(必要に応じて)

4.は、例えばメインインデックスの場合

index.html → index.php

に変更します。これを行わないと 3.でテンプレート内に記述したPHPスクリプトが動作しません。
5~7は2項の部品化が完了してから行ってください。6.はファイル名を変更することで検索エンジンからのアクセスや PageRank 等に影響を及ぼすため、必要に応じて .htaccess によるリダイレクト(~.html でアクセスされたら ~.php を表示)を行います。エントリーがある程度たまっている方は .htaccess を使われることをお勧めします。詳細については別の機会に記述します。

7.は、6.の対処が不要な場合、例えばファイル名が index.html かつURLにファイル名が指定されていない場合等に行います。index.html を削除する理由は、拡張子によってファイルアクセスの優先順位が異なるためです。具体的には、新しく index.php を生成しても index.html が残っていると、サーバは index.html にアクセスします。つまり一般的には .html や .htm が .php より優先されます(サーバの設定に依存します)。
なお index.html を削除する前に URLで http://~/index.php まで指定してファイルの正常性を確認されることをお勧めします。生成に失敗した状態で index.html ファイルを削除するとアクセスが全て index.php に流れてしまうためです。

1.2 カテゴリー・アーカイブ/日付アーカイブ/個別エントリーアーカイブの場合
下記の手順で変更します。

  1. 管理メニューの「ウェブログの設定」をクリック
  2. 次のページ右上の「アーカイブの設定」をクリック
  3. 「アーカイブ」欄にある「アーカイブ・ファイルのテンプレート」に青色部分
    • 個別:<$MTArchiveDate format="%Y/%m/%d-%H%M%S"$>.php
    • 日別:<$MTArchiveDate format="%Y/%m/%d/"$>index.php
    • 月別:<$MTArchiveDate format="%Y/%m/"$>index.php
    • カテゴリー:cat_<$MTCategoryID$>.php
    をそれぞれ設定します。上記は一例ですのでフォーマットは任意の形式に変更することができます。format 属性にある %Y は年、%m は月、%d は日を表わします。また "/" はディレクトリになります。"-" や最後の "index.php" はそのままファイル名に反映されます。
  4. 変更後、保存・再構築します。

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

  1. 管理メニューの「テンプレート」をクリック
  2. インデックス・テンプレートの右上にある「新しいインデックス・テンプレートを作る」をクリック
  3. 下記の項目を設定
    テンプレートの名前:任意
    出力ファイル名:任意
    テンプレートの内容:アーカイブテンプレート等から切り出したメニューリスト等のMTタグをペースト
    再構築オプション:チェック

以下は「最近のエントリー」をモジュール化する場合の例です。

テンプレートの名前:最近のコメント
出力ファイル名:recentEntries.html
テンプレートの内容:
<div class="sidetitle" id="entryname">
Recent Entries
</div>

<div class="side"id="entrylist">
<MTEntries lastn="10">
<a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a><br />
</MTEntries>
</div>

「テンプレートの名前」は管理メニュー上で表示するだけのものですので日本語でもOKです。「出力ファイル名」はこのテンプレートが再構築された時、ローカル・サイト・パスに出力されるファイル名です。一応拡張子として「.html」を付与していますが、このファイルに直接URL指定してアクセスする必要がなければ「.txt」でも大丈夫です。なおこのファイル名が1項の元テンプレートに埋め込む filename になります。
「再構築オプション」はモジュール化で重要なキーとなる部分です。ここでは「チェック」にしていますが、具体的な内容は次回詳しく説明したいと思います。

3.パスについて
1項の filename の補足ですが、ファイル名にはパスが必要です。パスは絶対パス(ルートとなるディレクトリからファイルが配置されているディレクトリまで)または相対パス(参照元のファイルがある位置からファイルが配置されているディレクトリまで)で記述します。テンプレートと同じ位置にあればパス名は不要ですが、モジュールは各アーカイブから利用されるのが一般的ですので、一律絶対パスを用いるのが良いでしょう。

4.コメント・プレビュー/コメント・エラーでのインクルードについて
この項目は我楽さんより頂いたご質問の反映ということで急遽追加致しました。これらのテンプレートは実体が存在しない(CGIプログラムによるHTTPレスポンス)ため、設定方法が異なります。また現状ではPHPスクリプトが評価できる方法が不明であるため(環境設定に依存?)、このファイルからインクルードする場合は

<$MTInclude file="filename"$>

を用います。

5.PHPスクリプトをインクルードする場合
上記のサンプルではMTタグが記述され(て実体に展開され)ただけのファイルをインクルードしていますが、PHPスクリプトが記述されたファイルをインクルードする場合もあると思います。
例えば、いくつかのモジュールのインクルードをまとめた

<?php readfile("recentEntries.html"); ?>
<?php readfile("recentComments.html"); ?>
<?php readfile("recentTrackbacks.html"); ?>

という内容の中間的なモジュール hogehoge.php を想定します。この hogehoge.php をさらにメインインデックス等からインクルードする場合には、

<?php include("hogehoge.php"); ?>

と記述します。readfile はファイルを読み込むだけの関数ですが、include はファイルを読み込み、さらにそれをプログラムとして評価するための関数です。拡張子は実験したところ任意の名称で問題ないようですが、単体でPHPスクリプトの動作を確認する場合等を考慮して .php にする方が良いでしょう。
逆に言うと、PHPスクリプトが記述されていないファイルをインクルードする場合は

<?php readfile("~.html"); ?>

で大丈夫ということです。インクルードが何段にもなる場合は、インクルード元に近い方から include 関数を用いて、一番末端だけ readfile 関数または include 関数を使用、という構造になります。

以上です。
当初、「PHPスクリプトでないファイルの拡張子は .html でOKです」というオチにするだけの予定だったのですが、最初のサンプルで、

<?php include("http://~.html"); ?>

としていたところ、その1Ogawa::Memoranda さんから頂いたコメントにある通り「PHPプログラムを含まないのであれば includeで読み込むのは得策ではありません」「サーバーサイドにあるファイルはURL指定する必要はありません」とのことで、記述を変更致しました。勉強不足、失礼致しました。あわせてご指摘感謝致します。
なお他のサーバにあるファイルを読み込む場合は上記のようなURL指定を行います。

ということでミイラ取りがミイラになりました。(つづく)






男の子育児と保険市場がタッグを組みました!



≪無料レポートできました!≫「子供を交通事故から守る! 今すぐ教えるべき大切なコト」



一日一回のご協力お願いします(^^)

子育てブログ村に1票! ⇒子育てブログ村

人気ブログランキングに1票! ⇒人気ブログランキング

このカテゴリの関連記事
トラックバックURL

このエントリーのトラックバックURL:
http://otokonoko.sky-po.net/mt-tb.cgi/50