Movable Type の PHP モジュール化の仕組みについて(その1:概要)
ブログでは「PHPモジュール化」という言葉を耳にされる機会が少なくないと思います。このサイトでもよく用いる言葉で用語集にも掲載していますが、PHPモジュール化についての具体的な説明がなかったので改めて書いてみたいと思います。
用語集の繰り返しですがモジュールは「部品」を指します。よく使われるのはサイドバーメニューのモジュール化です。具体的には「最近のエントリー」や「最近のコメント」等のメニューリストのMTタグ部分をメインインデックスやカテゴリーアーカイブ等のテンプレートから分割して、それらをひとつひとつの部品として新たなテンプレートを作ります。
メインインデックスやカテゴリーアーカイブ・日別アーカイブ・個別エントリーアーカイブには部品となった
メニューリスト本体は存在せず、部品をインクルードするタグ
<? readfile("/blog/koikikukan/hogehoge.html"); ?>
を埋め込みます。
PHPモジュール化のメリットは、部品化による作業効率の向上に加え、再構築時の性能向上、つまり時間短縮が挙げられます。
性能の話の前に再構築について分かる範囲で説明致します。スタティックページ生成の場合、再構築を実行することによってテンプレート上の全てのMTタグがMovable Typeのプログラムで解釈され、HTML文書(スタティックページ)が生成されます。仮に半年分で100の記事があり、それらが10カテゴリーに振り分けられているとすれば、サイト全体の再構築を行った場合、計117(メインページ×1・月別アーカイブ×6・カテゴリーアーカイブ×10・個別エントリーアーカイブ×100)のHTMLページが一気に生成されることになります。
生成される情報の中にはリアルタイムな再構築が不要なデータ(ブログ名等)、あるいはエントリーやコメント投稿時のみ再構築されればよいものもあり、これらについては各アーカイブページの再構築と同時に新たに生成する必要はほとんどありません。
つまりPHPモジュール化とは、再構築を頻繁に行う必要がない情報を部品としてまとめておき、必要な時だけ再構築を実行することで時間短縮する手法と認識しています。ただし劇的な短縮を望むものではありません。
PHPを利用しない「テンプレート・モジュール(管理メニュー「テンプレート」の一番下)」を用いたモジュール化もありますが、これは単に情報を部品として分割するだけなので、性能向上というメリットはありません。もちろん作業効率向上やテンプレート編集時の視認性向上という意味ではPHPモジュール化と同様です。ちなみにテンプレートモジュールを用いる場合のインクルードタグは
<$MTInclude module="hogehoge"$>
となります。両者の違いは次回ご説明致します。(つづく)
- Movable Type 4 の PHP モジュール化
- MTInclude タグによる SSI(サーバサイドインクルード)不要なインデックステンプレートのモジュール化
- .htaccess によるリダイレクト
- Movable Type の PHP モジュール化の仕組みについて(その4:再構築オプション利用方法)
- Movable Type の PHP モジュール化の仕組みについて(その3:変更方法)
- Movable Type の PHP モジュール化の仕組みについて(その2:具体的動作とMTIncludeとの違い)
- テンプレート・モジュールの利用
≫ PHPでモジュール化、ページ分割 from とりあえずいっとけ!?
このブログのテンプレートは風のまにまに号さんのMacromedia風テンプレー... [続きを読む]
≫ モジュール化とページ分割 from nekoの部屋
参考元 カテゴリーアーカイブと月別アーカイブのページ分割 : 小粋空間 PHPモ... [続きを読む]
≫ PHP化 from MovableTypeを活用して脱初心者!
PHP化は、やっておいた方がいいと思います。サイト立ち上げ間もない方はなおさらです。 [続きを読む]
≫ MovableType ダイナミックパブリッシング from イベント・レンタル屋の情報共有
大阪本社の松本です。 本日、このブログとは別のMovableTypeで、先日に正式リリースされたバー... [続きを読む]
≫ サーバー乗り換え from STEVEN. WeBlog
最近、サーバー乗り換えようかなー・・・なんて考えてます。 いま私がレンタルしてい... [続きを読む]
≫ MovableTypeのPHP化導入 from ginzi.com/blog
自分の場合、MovableType移行当初からPHP化にしてますが、 PHP化へ... [続きを読む]
≫ MTでflickrのちょっとランダム表示 from eternalheart.com
中央カラムの上部にflickrの写真を表示するようにしましたが使ってみると若干問... [続きを読む]
≫ 「最近のコメント」と「最近のトラックバック」をPHPモジュール化 from 14000.Rev Limit
「最近のコメント」と「最近のトラックバック」の表示がおかしいのに気づきました。 ... [続きを読む]
≫ Movable Type PHP化&ページ分割対応 from 一般庶民の記録ノート
昨晩は、Movable Typeで構築している本ブログのPHP化を行いました。 ... [続きを読む]
≫ http://www.code-0.org/archives/2006/09/09/2215.html from CODE-0
このブログでは偉そうにMovableTypeに関することを書いていますが、私はM... [続きを読む]
≫ リストをモジュール化 from ♪ごきげんBLOG♪
昨日は、「個別」 「カテゴリー」 「月別アーカイブ」 の各ページに、「最近のエン... [続きを読む]
≫ PHPモジュールのランダム表示 from AZ::Blog はんなりと、あずき色☆
このブログの表紙ページのサイドバーは、人知れずPHPモジュール化してあります(P... [続きを読む]
≫ MTメモ:PHPモジュール化する。 from TokyoLife -dalog-
とりあえず、先日MTのPHP化には 成功したワケですが… 実は、PHP化しただけ... [続きを読む]
≫ ダイナミックパブリッシングで静的ファイルを読み込む(smarty fetch) from ElectronicBrain is eating BreakFast
MovableTypeでダイナミックパブリッシングを稼働させることで最初にぶち... [続きを読む]
PHPモジュール化するのは良いのですがやや誤解があるかなと思います。
<?php include("http://yujiro.dyndns.org/blog/koikikukan/hogehoge.html"); ?>
のように書くのは2つの意味でお勧めしません。
まず、hogehoge.htmlはサーバーサイドにあるファイルなのでURLを指定する必要はありません。URLを指定すると単にファイル名を指定するのに比べてアクセスにオーバーヘッドがかかります。
次にincludeはPHPモジュールを読み込む関数で、引数をプログラムだと思って評価します。もしhogehoge.htmlがPHPプログラムを含まないのであれば、includeで読み込むのは得策ではありません。代わりにreadfileという関数があります。
以上をまとめるとこんな感じにするとよいのではと思います。
<?php readfile("/blog/koikikukan/hogehoge.html"); ?>
>(o)さん
こんばんは。
ご指摘ありがとうございました。早速修正しました。
またおかげさまでこの部分の疑問点がひとつ解決致しました。
PHPの仕様、もう少し真面目に勉強します。
ありがとうございました。
大変勉強になりました、いままでの疑問が解決しました。
ありがとうございます。
>Abuさん
こんばんは。
ご連絡ありがとうございます。
お役にたてたようでよかったです。
ご無沙汰してます。先日まで色々サポートして頂きありがとございました。早速なんですが、PHP化してメイン記事の分割をしたいのですが、まずPHP化する所ですでにつまづいております。MT管理の設定でHTMLをPHPにしてメインとアーカイブの出力ファイルで拡張子HTMLをPHPに変更して再構築してからFTTPで確認してPHPファイルができてるのを確認した上でHTMLファイルを削除して本来なら成功すると思っていたですがBlogが出ません。レンタルサーバーはPHPにも対応してるのですがどうしてもうまくいきません。
毎回のことながら大変申し訳ないのですがサポート宜しくお願いします。
>panserさん
こんばんは。
トップページのページ分割のエントリーを致しますので、少々お時間ください。
よろしくお願い致します。
いつも色々拝見させていただいております。
いろいろ拝見しながら調べてみて、他でもいろいろ聴いたんですがどうしても解らなくて質問させてください。
最近、MTでPHPのブログを立ち上げました。
その結果、ブログのメインページのURLは、最後にindex.phpが付かないとブログの表示がされないということになりますよね?
そこで、blogpeopleなどにも登録(index.phpが付いているURL)をしたんですが、ブログを更新したときに送信されるpingの情報の中のブログのURLはindex.phpが付かないもののようでして、登録情報とpingで送信されている情報が違うため、新着記事やリンクリストなどに表示される更新情報が反映されていないことがわかりました。
毎日更新しているのに、リンクリストでは全然更新されていないようになってしまっているのです。
最初はpingで送信しているブログのURLを変更できないものかと思っていろいろチャレンジしていたのですが、その内容をカスタマイズできる方法が見つからずで行き詰ってしまいました。未だpingで送信される情報をカスタマイズする方法を探し続けています。。
で、小粋空間さんを拝見すると、トップページのURLはindex.phpが付いていませんよね?phpファイルがトップページになっているときに、index.phpをつけなくてもphpファイルのトップページを表示させる方法があるのでしょうか??それであればblgpeopleのなどのサイトの登録を変更すれば問題ないことになると思われるのですが。。。
どうか、その方法があるならお教え願いたいのです。
非常に長文で解りにくい文章で申し訳ないのですが、どうかお教えくださいますよう、よろしくお願いいたします。
>ざっきーさん
こんにちは。
ご質問の件ですが、URLを "/" で止めると、その配下にあるファイルを index.html → index.php … と優先的に取得できる設定があります。
お使いのレンタルサーバではこの設定がされていないようですので、可能であれば、
DirectoryIndex index.html index.php
が記述された .htaccess をトップの index.php と同じディレクトリにアップロードすれば "/" で終わるURLでも正常に表示されるようになるかもしれません。
詳細は「.htaccess活用法(9)」に書かれています。
なお.htaccess の行末には必ず改行を挿入してください(=カーソルが次の行の先頭にある状態で保存)。
以上です。
それではよろしくお願い致します。
先ほどのエントリーのPHPモジュール化の件なのですが今、再度見直してると私のエントリーは「続きを読む」を取り入れているのですがその部分をモジュール化していないのが原因で最近のエントリー、コメント表示が正常にできないのでは?と思うのですが??
そこで、「続きを読む」部分もモジュール化しようと思うのですが方法がいまいちわかりません。現在、エントリーの個別部分はモジュール化できていると思うのですが。すみませんがサポートお願いします。
いつもお世話になっております。再度、エントリーのモジュール化の見直しここのサイト
を参考にしてなんとか全て正常に表示するようになりました。
ただ、再構築の時間短縮についてはあまり変わっていないのではたしてこれで正しいモジュール化なのか?疑問に思えます。お手数ですが確認とサポート宜しくお願い致します。
>panserさん
こんばんは。
作業お疲れ様です。
私は実際に使っていないのですが、再構築時間が劇的に改善されるものではありませんので、カスタマイズ自体は問題ないと思います(サーバやDBの性能に依存するところが大きいかもしれません)。
以上です。
それではよろしくお願い致します。
管理人様
PHP化をしようとしています。
トップページは、index.phpと入力した時は、正常に表示されます。
archives/xxxx/xxx.phpと入力したときは、白紙が表示されてしまいます。
初歩的な質問でもうしわけありません。ご教授できませんでしょうか?よろしくお願いいたします。
>mukuさん
こんにちは。
ご質問の件ですが、archives/xxxx/xxx.php の1行目が
<?xml version="1.0" encoding="…"?>
となっていないでしょうか。
そのようになっていたら、その行を削除するか、
<? echo('<?xml version="1.0" encoding="…"?>') ?>
としてください。
なおこの事象についての説明がもれていたため、上記の内容は「その3」に追記致しました。
ご迷惑おかけして申し訳ござません。
以上です。
それではよろしくお願い致します。
php化をしたところリンクがすべて思ったところに飛ばなくなってしまいました。いろいろと関連する記事を読んだのですがver3.2の説明じゃなかったり載ってなかったり未だに解決できません。どうかご指南お願いします。
>cocoaさん
こんばんは。
ご質問の件ですが、Firefoxでアーカイブページのリンクをクリックすると「URLの転送回数が制限値を超えました」というダイアログが表示されます。
このメッセージを調べると、原因は「このアドレスへのリクエストに対するサーバのリダイレクト設定がループしています」ということですので、アーカイブページの .htaccess の設定に問題があるかも知れません(profile.php は正常に表示されます)。
私が確認できたのは上記の問題ですが、異なる問題のご質問であれば再度具体的な事象をご連絡ください。
なおご質問にある「3.2の説明でない」エントリーのURLあるいはエントリータイトルをご連絡頂ければ、必要に応じて内容は適宜修正致します(バージョンアップによって過去の全てのエントリーを更新できておりませんのでその点はご連絡頂ければ幸いです)。
以上です。
それではよろしくお願い致します。
お返事ありがとうございます。わからないことだらけで、カスタマイズの本やサイトを見ながらやってます。.htaccess も本を見ながらやったのでうすが・・・。もう一度見直したのですが未だに問題が解決されません。
この設定は ○○.html というファイルにアクセスした人を ○○.php というファイルに転送するとういことですよね?まだ .html にアクセスする人がいなければ設定の必要がなかったりしますか?
>cocoaさん
こんばんは。
.htaccess でのリダイレクトの主旨は仰る通りです。html でリンクを貼っている人がいれば php にリダイレクトした方が親切です。
.htaccess の内容を見せて頂いた方が早く解決するかも知れません。
以上です。
それではよろしくお願い致します。
すみません .htaccess の内容こんな感じです。
Redirect permanent <$MTBlogURL relative_url="1"$>index.html <$MTBlogURL$>index.php
<MTEntries lastn="0">
Redirect permanent <$MTEntryPermalink relative_url="1"$> <$MTBlogArchiveURL$><$MTEntryDate format="%Y/%m/%d-%H%M%S"$>.php
</MTEntries>
<MTArchiveList archive_type="Monthly">
Redirect permanent <$MTArchiveLink relative_url="1" with_index="1"$> <$MTArchiveLink redirect_php="1" with_index="1"$>
</MTArchiveList>
<MTArchiveList archive_type="Category">
Redirect permanent <$MTArchiveLink relative_url="1" with_index="1"$> <$MTArchiveLink redirect_php="1" with_index="1"$>
</MTArchiveList>
<MTArchiveList archive_type="Daily">
Redirect permanent <$MTArchiveLink relative_url="1" with_index="1"$> <$MTArchiveLink redirect_php="1" with_index="1"$>
</MTArchiveList>
お願いします。
>cocoaさん
こんばんは。
ご連絡ありがとうございます。
上記はディレクトリに配置されている .htaccess の内容でしょうか。もしそうであれば、上記の内容を「インデックス・テンプレート」として登録をして、再構築を行う必要があります。
再構築を行うことで、<$MT?$> というタグが実際のパスに変換されますので、変換された後のファイルを .htaccess として利用します。
以上です。
それではよろしくお願い致します。
こんばんは。もう何度も質問して申し訳ございませんでした。 先ほど問題が解決しました。変換後の .htaccess の内容を確認したところやはりループするような内容でした。不十分な質問に細かく丁寧に解説していただきホントありがとうございました。これからもこのサイトを活用させてもらいます。
>cocoaさん
こんばんは。
ご連絡ありがとうございました。
無事に解消されてなによりです。
またなにかございましたらご連絡ください。
ではでは!
コメントの上記に書かれてある事から
<?php include("http://yujiro.dyndns.org/blog/koikikukan/hogehoge.html"); ?>
から
<? readfile("/blog/koikikukan/hogehoge.html"); ?>
に変更されたようですが、サイドバーの一部をモジュール化してみるとエントリー、カテゴリー、日付アーカイブのみ表示がおかしくなります。
<?php include("http://yujiro.dyndns.org/blog/koikikukan/hogehoge.html"); ?>
のようにすると正常になりますけど、インクルードタグは間違いないのでしょうか? どのように修正すれば良いでしょうか?
>panserさん
こんにちは。
ご返事遅くなってすいません。
下記のようにしてみてください。
<? readfile("<$MTBlogRelativeURL$>hogehoge.html"); ?>
それではよろしくお願い致します。