「WordPressで学ぶPHP(4)通信編」を発売しました。
本書は、「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造編」「WordPressで学ぶPHP(3)関数編」の続編にあたり、Webブラウザとサーバー(PHP)との通信と、PHPから他のサーバーに通信することについて解説します。
リアルタイム再構築プラグイン(MT4/5対応版・その1)
以前に「リアルタイム再構築プラグイン」というものを公開していましたが、これのMT4/5対応版を公開します。
この使い方を数日に分けて紹介します。
2007年9月6日
デバッグ用のログを出力する処理が残っていました。
9月6日午前8時30分までにダウンロードされた方は、お手数ですが再度ダウンロードしていただき、lib/RealtimeRebuild.pmを差し替えてくださいますようお願いします。
1.概要
リアルタイム再構築プラグインは、Perl版ダイナミック・パブリッシングと同様に、アクセスがあった時点でページを再構築するものです。
任意のテンプレートを再構築することができますが、基本的には、アクセスがあるたびに変化させたい部分だけを再構築して、Ajax等を利用して他のページに読み込ませるために使うことを想定しています。
また、従来のリアルタイム再構築プラグインの機能に加えて、ページをキャッシュする機能や、PHPが含まれているページを正しく表示できるようにする機能を追加しました。
2.インストール
このプラグインは、以下のアドレスからダウンロードすることができます。
- Movable Type 4.0x用
RealtimeRebuild_1_60.zip - Movable Type 4.1x/4.2x用
RealtimeRebuild_1_62.zip - Movable Type 5.0x/5.1x用
RealtimeRebuild_1_72.zip - Movable Type 5.2x/6.0用
RealtimeRebuild_1_82.zip
プラグインの継続的な開発やサポートのために、プラグインをご利用された方は、ドネーション(寄付)を行っていただけると幸いです。
ドネーションの方法は、こちらのページをご参照ください。
また、このプラグインの他にも、いくつかのプラグインを配布しています。
配布中のプラグインは、Movable Type Plugin Directoryのページをご参照ください。
Movable Typeのプラグイン開発等のドキュメント「Movable Type Developer's Guide Volume 1」も販売しています。
ご自分でプラグインを作ってみたい方に、ぜひお勧めしたい一冊です。
詳細は特設ページをご覧ください。
また、このプラグインは「RebuildHelper」というプラグインを併用します。これは以下のアドレスからダウンロードすることができます。
- Movable Type 4.0~4.13用
RebuildHelper_1_01.zip - Movable Type 4.2用
RebuildHelper_1_03.zip - Movable Type 5/6用
RebuildHelper_1_04.zip
これらのファイルを解凍すると、「RealtimeRebuild」「RebuildHelper」というフォルダができます。
これらのフォルダを丸ごと、Movable Typeの「plugins」ディレクトリにアップロードします。
そして、「RealtimeRebuild」ディレクトリの中の「mt-realtime-rebuild.cgi」のパーミッションを「755」などに変え、実行可能にします。
3.リアルタイム再構築を許可するテンプレートの設定
リアルタイム再構築を行う前に、それを許可するテンプレート設定します。
ブログのメニューで「設定」→「プラグイン」を選び、プラグイン設定のページを開きます。
そして、RealtimeRebuildプラグインのところで「設定」のタブをクリックすると、テンプレート名が一覧表示されます。
その中で、再構築を許可するテンプレートをクリックして選択し、「変更を保存」ボタンをクリックします。
複数のテンプレートの再構築を許可する場合は、Ctrlキーを押しながらテンプレートをクリックします。
なお、テンプレートの中にパスワード等のセキュリティに関する情報が含まれている場合、そのテンプレートはリアルタイム再構築を許可しないでください(パスワード等を見られる恐れがあります)。
例えば、Perl版ダイナミック・パブリッシングも導入している場合、「sqlsub_mysql.php」または「sqlsub_pgsql.php」のテンプレートには、データベースのパスワードが含まれます。
Perl版ダイナミック・パブリッシングもご利用の方は、このテンプレートは必ず再構築を許可しないようにしておいてください。
4.動作のテスト
インストールが終わったら、動作をテストしてみます。
まず、「3.リアルタイム再構築を許可するテンプレートの設定」の手順に沿って、メインページのリアルタイム再構築を許可します。
次に、インデックステンプレートを1つ新規作成します。
そして、メインページのテンプレートをPHP化していない場合は、以下のタグを入れます。
<a href="<$MTRealtimeRebuildLink tmpl_name="メインページ"$>">MainPage</a>
<a href="<$MTRealtimeRebuildLink tmpl_name="メインページ" tmpl_type="index"$>">MainPage</a>
また、メインページのテンプレートをPHP化している場合は、以下のタグを入れます。
<a href="<$MTRealtimeRebuildPHPLink tmpl_name="メインページ"$>">MainPage</a>
<a href="<$MTRealtimeRebuildPHPLink tmpl_name="メインページ" tmpl_type="index"$>">MainPage</a>
テンプレートを保存して再構築した後、できたページを開くと、「MainPage」のリンクが表示されます。
そのリンクをクリックして、メインページがその場で再構築されて表示されれば、動作はOKです。
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください
しきだ博紀
以前フォームメールの件でお世話になったしきだといいます。
さて、MT4.1でリアルタイム再構築を導入したところ、システムログに
RealtimeRebuild : Can't load blog.dat file : Can't call method "NoLocking" on an undefined value at /domain/domain/home/admin/public_html/mt/plugins/RealtimeRebuild/RealtimeRebuild.pl line 268.
というエラーが記録されます。
ちなみに作成されたmod_infoフォルダのパーミッションは707、blog.datのパーミッションは644で作成されておりました。
動作には支障ないのですが、原因がつかめません。どのようなことが考えられるでしょうか?
壱からしきだ博紀への返信
>しきだ博紀さん
こんにちは。
その件はこちらでも把握しています。
修正版を近日公開しますので、しばらくお待ちください。
中村 ミノル
MT3.3以前の時代に開発されたRealtimeRebuildプラグインは、
MT.4.2ではそのまま使うことはできない、ということになりましょうか?
壱から中村 ミノルへの返信
>中村 ミノルさん
こんにちは。
MT3.3時代の旧バージョンは、MT4.2で動作確認していません。
ただ、旧バージョンは月別カテゴリーアーカイブ等のMT4の新機能には対応していませんので、MT4.2対応のものをお使いください。
中村 ミノルから中村 ミノルへの返信
藤本様
本件承知しました。
>>中村 ミノルさん
>こんにちは。
>MT3.3時代の旧バージョンは、MT4.2で動作確認していません。
>ただ、旧バージョンは月別カテゴリーアーカイブ等のMT4の新機能には対応していませんので、MT4.2対応のものをお使いください。
なるよし
当ブログにおいて,年別と年度別は日別・月別と違うテンプレートを用いています。
年度別は,プラグインによって実現しております。
http://code.as-is.net/public/wiki/FiscalYearlyArchives.ja_JP
リアルタイム再構築プラグインの関係か,
年度別に,日別・月別のテンプレートが利用されます。
(年別は指定した物になる。)
これは,プラグインとプラグインから来るバグだと思われます。
対処できるのであれば,ヒントでもいいので教えてください。
壱からなるよしへの返信
>なるよしさん
こんにちは。
ご指摘の件ですが、リアルタイム再構築プラグインの不具合です(MT標準以外のアーカイブを想定していません)。
今後のバージョンアップで対処したいと思いますが、申し訳ありませんが時期は確約できません。
なるよし
カテゴリー年度表示はうまく表示されています。
もしかすると,FiscalYearlyプラグインのバグかもしれません。
こちらで調節してみます。
井上
藤本様
お世話になります。
つい先日、MTOS活用テクニックを購入させていただきました井上と申します。
現在、MTに検索機能を実装しようと藤本様の書籍を勉強して追ったのですが、送信ボタンを押した後に検索結果画面にはタイトルにあります
テンプレートを読み込むことができませんでした。
at lib/RealtimeRebuild.pm line 63
というエラーが表示されて、解決方法が見つかりません・・・。
・テンプレートをUTF-8保存
・RealtimeRebuildで、設定対象テンプレートは一つのみ
というところは再確認しております。
原因が分かりますでしょうか?
お忙しいところ申し訳ございませんが、ご教授いただければと思います。
よろしくお願いいたします。
壱
>井上様
拙著をお買い求めいただき、ありがとうございます。
ご質問の件ですが、インデックステンプレート等などのテンプレートモジュール以外のテンプレートに、読み込もうとしたテンプレートモジュールと同じ名前のものはないでしょうか。
ちなみに、MTの標準のテンプレートセットだと、「検索結果」という名前のシステムテンプレートがあります。
RealtimeRebuildプラグインで読み込むテンプレートモジュールには、「検索結果」という名前は使わないでください。
井上
藤本様
お世話になります。
すみません、先ほどコメントしました井上です。
search_formの、検索結果表示のテンプレートの名前が違ってたのが原因だったようです。
自己解決致しました。
今後ともよろしくお願いいたします。
さまんさ
はじめまして。
申し訳ございません、使い方が良くわからないので教えていただければ幸いです。
3「リアルタイム再構築を許可するテンプレートの設定」
の作業の後、次にどのような作業をすれば実際に使えるのでしょう?
movabletype.jpサイトでは、
「リアルタイム再構築するためのタグをテンプレートに追加します。」とあります。
このタグとは、設定されたプラグインのリソースをクリックすると表示されるタグ一覧のことでしょうか?
4.動作のテストはできました。
以上、お手数ですがよろしくお願いいたします。
壱からさまんさへの返信
>さまんささん
こんにちは。
ご質問の件ですが、具体的にどういった用途で、このプラグインを使おうと思ったのでしょうか。
それによって、インストール後の作業はいろいろです。
ちなみに、「ブログの各ページを、アドレスをそのままで、動的に再構築できるようにしたい」という用途だと、このプラグインではありません。
「Perl版ダイナミック・パブリッシング」をご利用ください。
http://www.h-fj.com/blog/mtplgdoc/perldynamic.php
さまんさ
>ご質問の件ですが、具体的にどういった用途で
お忙しいところ申し訳ございません。
MTトップページ(インデックステンプレート)へアクセスがあった時に再構築されるように使おうと思いました。
本来は、mt Rebuildを使い、CRONで自動再構築しようと思ったのですが、MT4.×では動かないということで、いろいろ探し、たどりつきました。
壱からさまんさへの返信
>さまんささん
こんにちは。
ご希望の用途なら、Perl版ダイナミック・パブリッシングをご利用ください。
さまんさ
壱さま
ありがとうございます!
使い方がちょっと違っていたのですね。わかりました。。
Perl版ダイナミック・パブリッシング使ってみます!
らでぃあ
いつもページを拝見して勉強させていただいています。
PHP化したページにリアルタイム再構築プラグインを設置してみたのですが、エラーがでてしまい、解決できずに困っています。
ご教授頂けたらと思います。宜しくお願い致します。
動作テストの段階でメインページの確認をしたところ以下のようなエラーになってしまいます。
Warning: include(/path/rcache/242d83e8572fd4314947b0c7efe12b0c.php) [function.include]: failed to open stream: No such file or directory in /path/mt-realtime-rebuild.php on line 144
Warning: include() [function.include]: Failed opening '/path/rcache/242d83e8572fd4314947b0c7efe12b0c.php' for inclusion (include_path='.:') in /path/mt-realtime-rebuild.php on line 144
MT4.261に設置しています。
どうぞ宜しくお願い致します。
壱かららでぃあへの返信
>らでぃあさん
こんにちは。
「ファイルが読み込めない」というエラーですので、以下のことを確認してみてください。
1.ブログの出力先ディレクトリに「rcache」というディレクトリが存在しているかどうか
2.rcacheディレクトリに、CGIから書き込みができるように、適切なパーミッションが設定されているかどうか(「757」や「707」など)
らでぃあかららでぃあへの返信
ご返信ありがとうございます。
>2.rcacheディレクトリに、CGIから書き込みができるように、適切なパーミッションが設定されているかどうか(「757」や「707」など)
rcacheは存在しており、
rcacheディレクトリのパーミッションは777や707、757と変更して試してみたのですが結果は同じで、
rcacheの中にファイルが生成されていないようです。
ディレクトリは空になっておりました。
考えられる原因がありますでしょうか?
お手数かと思いますがどうぞ宜しくお願い致します。
壱かららでぃあへの返信
>らでぃあさん
こんにちは。
申し訳ありませんが、いただいた状況だけでは、プラグインが動作しない原因は不明です。
こあらから井上への返信
>テンプレートを読み込むことができませんでした。
>at lib/RealtimeRebuild.pm line 63
私の場合は、検索フォームのリスト5.23 下から5~6行目に tmpl_type="index"を加えると直りました。
" />
ハスキー
こんにちは。
プラグインをインストール後、上記に記載の通り動作のテストを行いました。
<a href="<$MTRealtimeRebuildLink tmpl_name="メインページ" tmpl_type="index"$>">MainPage</a>
から飛ぶリンク先には情報が正しく表示されているのですが、実際再構築をしたいメインページには最新の更新情報が表示されない現象が起こっております。
ちなみに更新したエントリーはマルチブログ構築での日時指定投稿です。
疑問なのですが、、、、
もし日時指定投稿に対応していないのであれば動作テストにも
正しく表示されないと思うのですが、そうではないのは何故でしょうか?
お手数かと思いますがどうかご返答宜しくお願い致します。
壱
>ハスキーさん
こんにちは。
状況を整理すると、以下のようになっているということでしょうか。
1.メインページのテンプレートで、リアルタイム再構築のテストを行った。
2.リアルタイム再構築したメインページには、日時指定投稿したブログ記事が表示された。
3.通常の方法で再構築したメインページには、日時指定投稿したブログ記事は表示されていない。
こちらで試してみた限りでは、日時指定したブログ記事で、かつまだ指定の日時になっていないブログ記事は、リアルタイム再構築の結果には出てきませんでした(もちろん、通常の再構築の結果にも出てきませんでした)。
申し訳ありませんが、そちらの現象の原因は不明です。
なお、リアルタイム再構築プラグインは、日時指定投稿については何も行いません。
hiro
先日、MTOS活用テクニックを購入させていただきました。
とても参考になっていろいろ楽しんでます。
2週間程いろいろ試しましたが出来ないことがあり、
一つだけ教えて頂きたいことがありコメントさせて頂きました。
携帯サイトでテンプレートを作成し、文字コードも携帯サイトにあわせて、SHIFT-JISにプラグインにて変更しまたしたが、複数検索がどうしてもエラーがでます。
何かいい方法は御座いませんでしょうか?
エラー内容を載せておきます。お時間がある時で結構ですので
申し訳御座いませんが宜しくお願い致します。
An error occurred
Invalid request: corrupt character data for character set UTF-8
MTのバージョンは下記の通りです。
Movable Type version 4.23-en
壱からhiroへの返信
>hiroさん
こんにちは。
ご希望のようなことを行うには、検索を行う前に、送信された文字列の文字コードを、ShiftJISからUTF-8に変換する必要があります。
試してはいないですが、小川宏高氏が作られたMT-I18Nプラグインを使って、文字コードを変換してから、検索を行うようにすれば良いと思います。
http://code.google.com/p/ogawa/wiki/MTI18N_Plugin
BP
藤本様
こんにちは。
RealtimeRebuildを使わせて頂いているのですが、検索フォームの検索ボタンを実行すると「ページが見つかりませんでした。mt-realtime-rebuild.cgiが見つかりませんでした。」とエラーが出ます。
原因は何が考えられるでしょうか。
パーミッションの変更やプラグインの設定は終わっています。
壱からBPへの返信
>BPさん
こんにちは。
メッセージの通りだとすると、フォームのaction属性で指定しているCGIのアドレスと、実際のmt-realtime-rebuild.cgiのアドレスとが合っていないことになります。
もし、アドレスにwwwをつけてもつけなくてもアクセスできるようにしている場合、フォームのaction属性の値にwwwが含まれていればwwwを削除し、逆にwwwがなければwwwを追加してみてください。
BP
藤本様
早速のご返信有り難うございます。
mt-config.cgiのCGIPathを絶対パスに書き変えたところ正常に作動するようになりました。
お手数をおかけしました。
ありがとうございました。
のりへいから壱への返信
藤本様
こんにちは、いつも参考にさせて頂いています。
さて、少し古いスレッドですが、ハスキーさんの日時指定で公開した場合
の動作ですが、こちらでも同様の動きがありました。
具体的には、以下の通りです。(MultiBlogでAというウェブサイトと、
Bというブログがある想定です。)
1)ブログBで日時指定した記事を登録して、特定の時間で公開。
この公開にはRunPeriodicTasksを利用して問題無く公開済み。
同時にブログBのメインページに利用している、インデックステンプ
レートは、リアルタイム再構築の動きが正常に動作しているようで
一覧に新着情報として登録した記事が表示されております。
2)この状態で、ウェブサイトAのメインページ(インデックステンプ
レート)上にも、ブログBの記事を読み込んで、一覧表示しているので、
本来であれば、正常に一覧表示されるはずですが、どうもうまく更新
されていないようです。
3)そこで、ハスキーさんも試した通り、下記タグのウェブサイトAの
メインページへアクセスすると、一覧が更新されており、ブログBの
日時公開設定して公開された記事が、問題なく表示されております。
">MainPage
※上記URLでは更新されているのに、実際のページは更新されていない。。
ここで、ハスキーさんも疑問と思われていたのが、そもそも日時公開指定に
対応しているのでしょうか?
また、対応しているのであれば、上記MultiBlogの構成で正常に再構築
処理が行われていないようです。
逆に、対応していないのであれば、なぜ、上記URL(リンク)で開いた
画面では、一覧が更新されて、新着記事が表示されているのでしょうか?
ということかと思います。
本質的には、日時公開などは関係なく、再構築をされているだけなので
問題無いはずですが、おそらくMultiBlog環境で、何かしら影響が
あるのでは?と思われます。
上記URL(リンク)で表示されているので、すごく惜しいのですが、
何か対策はございますでしょうか?
壱から壱への返信
>のりへいさん
こんにちは。
ご質問の件ですが、そもそもこのプラグインが想定している用途と異なります。
「再構築」という名前が紛らわしいのだと思いますが、このプラグインの動作はいわゆる「動的表示」です。
テンプレートを再構築した結果を、直接にWebブラウザに送信します。
「ウェブサイトAのメインページのサイドバーに、常にブログBの最新記事一覧を表示したい」という用途でこのプラグインを使うのであれば、ブログBの記事一覧の部分だけをテンプレート化して、Ajaxでこのプラウグインを呼び出して読み込む、という形を取ります。
taka
お世話になります。
書籍を読んで、RealtimeRebuildを使わせて頂いております。
今回mt5の管理ツールと公開ドメインが違うので設定に困っております。
mt5管理ツール
http://a.jp
/home/a/public_html/
公開パス
http://b.com
/home/b/public_html/
この時プラグインのファイルなどが、
a.jpの方にあるため、b.comで使用できないのですが、
使用するためには、どこか設定を変える必要がありますか。
mt-config.cgiの
CGIPath
StaticWebPath
だと思うのですが、
ご教授いただけますと助かります。。
よろしくお願い致します。
壱からtakaへの返信
>takaさん
こんにちは。
残念ながら、Ajaxの仕様上、ホストをまたがる通信を行うことはできません。
いただいた例の場合だと、b.comに通信を中継するCGI等を設置し、b.comのページから中継CGIにAjaxでアクセスして、間接的にa.jpのMovable Typeと通信する必要があります。
匿名
壱さん
早々のお返事ありがとうございます。
>b.comに通信を中継するCGI等を設置し、b.comのページから中継CGIにAjaxでアクセスして、間接的にa.jpのMovable Typeと通信する必要があります。
難易度が高いですね。。
そうすると、
同じドメインでアクセスできる範囲内で、
cgiを設置しないといけないんですね。
MTで複数の別々のドメインを管理できるようですが、
pluginsを使うとなると話が違ってくるのですね。
pluginsだけMT本体から切り離して使えないんですね。
taka
壱さん
度々申し訳ありません。
外部サイトからRealtimeRebuildを実行することはできるようでしょうか。
例えば、phpの場合ですと、
file_get_contentsは他のサイトのデータも取れますが、
で出力したhtmlを丸ごと取ってきたら
比較的簡単にできそうな気もしたのですが。。
いずれにしても大変なことは変わりないですね。。
壱からtakaへの返信
>takaさん
こんにちは。
b.comに、file_get_contentsでa.jpのMovable TypeにアクセスするPHPを置いて、b.comのページからはそのPHPにAjaxでアクセスする方法で良いはずです。
taka
>壱さん
度々失礼致しました。
サポートも素晴らしいですね。
大変感謝しております。
ありがとうございます。
どんたこす
こんにちはMT5.2.7でカスタム検索を行うために動作するか確認の為にインストールさせていただきました。
ですが、再構築の許可するテンプレートにチェックを入れましたが下記のエラーが発生します。
テンプレートを読み込むことができませんでした。RealtimeRebuild.pm line 65.
パーミッションの変更もしています。
何か良い解決方法はございませんでしょうか?
是非ご教授くださいませ。
よろしくお願いします。
壱からどんたこすへの返信
>どんたこすさん
こんにちは。
検索結果のテンプレートが属するブログと、検索フォームのテンプレートが属するブログは、一致しているでしょうか?
両者が異なる場合は、検索フォームの「<input type="hidden" name="blog_id" value="<$mt:BlogID$>" />」の「<$mt:BlogID$>」を、検索結果テンプレートが属するブログのIDに書き換えてください。
ぽりんきー
はじめまして。MT5.2で使用させていただいております。
『質問内容』
ブログ記事のタイトルなどが更新されたときのリビルドは順調に動いておりますが、
プラグイン※で追加された項目に対して更新が行われたときは、リビルドがされないようです。
追加されたカラムは、ブログ記事のタイトルなどと同じテーブル(mt_entry)にあります。
同じテーブルなので、更新があればリビルドされると思ったのですが、
そうもいかないようです。
どのような条件でリビルドがされるのか、教えていただけないでしょうか?
お手数ですが、ご教示いただけると幸いです。よろしくお願い致します。
※プラグインは、下記のアクセスカウントプラグインも使用して、アクセスカウントを取っています。
mt_entryテーブルに、accessedCount(アクセス数)と、Lastaccessed(最終アクセス日時)というカラムを拡張しています。
http://www.movabletype.jp/plugins/access_counter.html
壱
>ぽりんきーさん
こんにちは。
テンプレートが再構築されるのは、mt-realtime-rebuild.cgiが呼び出されたときです。
オブジェクトの状態に変化があったからといって、その都度再構築されるのではありません。
yoshi
いつも、プラグインを便利に使わせていただいています。
MT5.2とリアルタイムリビルド1.8.1でサイトを構築しています。
記事を公開日指定にしてCronを1時間毎に起動し、再構築をトリガーを実行するようにしています。
その際、通常のテンプレートを使用している箇所では、公開日指定の記事が表示されるのですが、リアルタイムリビルドを使用してるページでは、
公開日指定の記事が表示されてきません。
記事自体は、正常に公開に変更されています。
なぜ、リアルタイムリビルドを使用しているページでは、表示されないのでしょうか?
何か思い当たることや、ヒント等いただけるとありがたいです。
壱からyoshiへの返信
>yoshiさん
こんにちは。
このプラグインは、基本的に再構築トリガーとからめた使い方をするものではありません。
常に最新の情報を出力したい部分を動的に構築して、他のページにAjax等で組み込むためのものです。
このプラグインでページを構築したときに、同時に再構築トリガーも働かせたい場合は、拙作の「ほぼ指定日投稿」プラグインと組み合わせると良いと思います。
http://www.h-fj.com/blog/archives/2012/09/28-210809.php