Movable Typeには「指定日投稿」の機能があり、指定した日時に自動的にエントリーを投稿することができます。
ただし、そのためには指定日投稿のスクリプトを定期的に実行する必要があります。
cronを使えないサーバーだと、スクリプトを定期的に自動実行することができません。
この問題を解決するために、「ほぼ指定日投稿」(JavaScript版)というプラグイン公開していました。
ブログに誰かがアクセスしてきたときに、指定日投稿の処理を行うというものです。
このプラグインを若干改良し、以前のバージョンよりも、幾分簡単に設定できるようにしました。
なお、既存のバージョンをお使いの方は、バージョンアップするとテンプレートの書き換え等が必要になりますので、既存のバージョンをそのままお使いください。
1.プラグインのダウンロード
まず、以下のアドレスからプラグインのファイルをダウンロードします。
プラグインの継続的な開発やサポートのために、プラグインをご利用された方は、ドネーション(寄付)を行っていただけると幸いです。
ドネーションの方法は、こちらのページをご参照ください。
また、このプラグインの他にも、いくつかのプラグインを配布しています。
配布中のプラグインは、Movable Type Plugin Directoryのページをご参照ください。
Movable Typeのプラグイン開発等のドキュメント「Movable Type Developer's Guide Volume 1」も販売しています。
ご自分でプラグインを作ってみたい方に、ぜひお勧めしたい一冊です。
詳細は特設ページをご覧ください。
ファイルを解凍すると、「plugins」と「mt-static」の2つのフォルダができます。
これらのフォルダを、Movable Typeのインストール先ディレクトリにアップロードします。
2.初期設定
このプラグインを使うブログで、初期設定を行います。
ブログのプラグイン設定のページを開き、RunPeriodicTasksプラグインの設定を開きます。
そして、以下の各項目を設定します。
| 設定項目 | 内容 |
|---|---|
| スケジュールタスクを実行しているときに表示するHTML | 指定日投稿の処理が行われている間に、ブログのページに表示する内容を指定します。 |
| スケジュールタスクが実行されたときに表示するHTML | 指定日投稿の処理が終わったときに、ブログのページに表示する内容を指定します。 |
| スケジュールタスクがスキップされたときに表示するHTML | 指定日投稿は、15分に1回だけ行うようになっています。前回の実行から15分たっていない場合は、ここで指定したHTMLがブログのページに表示されます。 |
| Ajaxを使用 | 通常はオンにしておきます。 ただし、ブログのドメインとMTのドメインが異なる場合は、Ajaxを使うことができませんので、その場合はオフにします。 Ajaxを使えない例:ブログのドメインが「blog.sample.com」で、MTのドメインが「www.sample.com」の場合 |
初期設定が終わったら、「変更を保存」のボタンをクリックします。
なお、設定を全く変えない場合も、変更を保存する必要があります。
3.テンプレートの書き換え
次に、指定日投稿を起動するためのタグを、テンプレートに追加します。
メインページやブログ記事など、アクセスが多いページのテンプレートで、以下のタグを追加します。
<$MTRunPeriodicTasksJS$>
このタグを追加した位置に、指定日投稿の結果(手順2.で設定したHTML)が表示されるようになります。
テンプレートの書き換えが終わったら、そのテンプレートを再構築します。
これでこのプラグインが動作するようになります。
なお、Ajaxを使わない場合、このタグの位置でCGIにアクセスし、CGIの結果が返ってくるまでページの読み込みが止まります。
そのため、ページの先頭の方にこのタグを入れると、ページの表示が重くなったように見えます。
Ajaxを使わない場合は、MTRunPeriodicTasksJSタグはテンプレートのなるべく最後の方に追加するようにします。
4.指定日投稿の結果を画像で表示する
「mt-static」→「plugins」→「RunPeriodicTasks」→「images」ディレクトリに、指定日投稿の結果を表す画像もアップロードされます。
手順2.で、これらの画像を表示するように設定しても良いでしょう。
5.ライセンス
このプラグインはMITライセンスで公開します。
商用版MTおよびMTOSでお使いいただくことができます。





コメントはスレッド表示になっています。
また、スレッドの先頭のコメントに対する返信には、先頭に矢印を表示しています。
いつも様々なプラグインを使わせていただいております。
今回も便利なものをありがとうございます。
早速設置させていただいたのですが、時間が来ても公開になりません。
プラグインは使用可になっており、設定の保存も行いました。
タグ自体はインデックスページの最終(フッタの前)に設置しました。
が、何か間違っているのでしょうか?
MT4.1でPHP化、ダイナミックパブリッシングも使用しています。
>寺山 銀さん
こんにちは。
MTの指定日投稿の処理に不具合があるようです。
MT4.1をお使いであれば、MT_DIR/lib/MT/WeblogPublisher.pmの1930行目付近に、以下の赤字の行を追加してみてください。
・
・
・
$changed++;
$total_changed++;
}
$blog->touch;
$blog->save;
if ($changed) {
my %rebuilt_okay;
my $rebuilt;
・
・
・
お世話になります。
ご指摘の箇所を修正してみましたが、やはり公開されませんでした。
ところで、説明文で
「ファイルを解凍すると、「plugins」と「mt-static」の2つのフォルダができます。
これらのフォルダを、Movable Typeの「plugins」ディレクトリにアップロードします。」
とありますが、これまでの例を見ると「mt-static」はMovable Typeの「mt-static」フォルダにアップロードしていたと思うのですが、今回はどちらもMovable Typeの「plugins」ディレクトリアップロードして間違いないのでしょうか?
>寺山 銀さん
こんにちは。
記事の間違いをご指摘いただき、ありがとうございます。
「plugins」「mt-static」のフォルダは、Movable Typeのインストール先ディレクトリにアップロードします。
訂正箇所を修正し、設定通りにし直したのですが、やはり公開されませんでした。
すっごく基本的な質問だと思いますが、自分でアクセスした場合ももちろんその対象となるのですよね?
新しい記事を書いて、公開時間から15分ほど待って読み込みをしますが、公開されなかったもので・・・
他に使っているプラグインのせいでしょうか?
おそらくですが、うまくいったようです。
昨晩は公開されました。昨々晩はダメだったのですが・・・?
また、おかしな事があれば、書き込みにまいります。
ありがとうございます。
どうもはじめまして、にしさきです。
こちらのプラグインを使わせていただきまして、設定通り設定してみたのですが、
タグを埋め込んだページにアクセスすると、
「Smarty error: [in mt:194 line 75]: syntax error: unrecognized tag 'mtrunperiodictasksjs' (Smarty_Compiler.class.php, line 580) 」
というエラーがでて、タグを埋め込んだ部分が表示されなくなってしまいます。
MT4.1です、なにか原因は考えられますでしょうか、お知恵を拝借いただければ幸いです。
>にしさきさん
プラグインご利用ありがとうございます。
ご質問の件ですが、申し訳ありませんが、このプラグインはMT標準のダイナミックパブリッシングには対応していません。
お書きになったエラーメッセージは、MT標準のダイナミックパブリッシングが出しているものです。
拙作の「Perl版ダイナミックパブリッシング」となら併用することができます。
http://www.h-fj.com/blog/archives/2007/07/06-095902.php
ただし、その場合もMTの本体を一部書き換える必要があります。
Movable Typeのインストール先→「lib」ディレクトリ→「MT」ディレクトリにある「WeblogPublisher.pl」というファイルで、1942行目にある「$rebuilt++;」
の行の後に、以下の2行を追加してください。
$blog->touch;
$blog->save;
壱様
ご丁寧な返信どうもありがとうございました。
無事解決する事が出来ました。
すばらしいツールに感謝感謝です。
ブログ簡単パワーアップ Movable Type4 スーパーカスタマイズテクニック
予約させていただきました!
RunPeriodicTasksプラグイン、便利に使わせてもらっております。
Mooberという別の作者さんのプラグインで、携帯のメールから記事を起こすためにRunPeriodicTasksプラグインを使っております。
普段はテンプレートに埋め込まずに、http://うちのサーバ/mt/plugins/RunPeriodicTasks/mt-run-periodic-tasks.cgi?blog_id=1 というアドレスを携帯から参照することで、起動させていました。
MTOS4.12までは、それでMooberのメール取得が起動して記事ができたのですが、MTOS4.2にあげてからうまくいきません。
サーバのコンソールで、mtディレクトリの中の./tools/run-periodic-tasksを実行した場合には、記事メールが取得されて記事ができるのですが・・・
原因がMooberプラグイン側なのかRunPeriodicTasksプラグイン側なのかわからないのですけども。
>のぶおパパさん
こんにちは。プラグインご利用ありがとうございます。
ご質問の件ですが、plugins/RunPeriodicTasks/lib/RunPeriodicTasks.pmの54行目を以下のように書き換えて、動作を試してみてください。
書き換え前
$app->run_tasks;
書き換え後
system "cd ../..; perl ./tools/run-periodic-tasks";
ご指摘の個所を修正して、無事動くようになりました。
早速の対応、ありがとうございました。
RunPeriodicTasksプラグインを利用させて頂いています。
痒いところに手が届く素晴らしいプログラムを
有難う御座います。m(_ _)m
デフォルト設定ですと15分おきに実行されるようですが、
こちらを60分おきに変更したいと考えています。
色々とソースを見させて頂いた所
RunPeriodicTask.pl
内にある33行目の
['rpt_interval', { Default => '15' }],
を15から60に変更すれば良いのかと思いましたが
この変更のみでは60分おきの実行になりませんでした。
$MTRunPeriodicTasksJS$>
を利用せずに
script type="text/javascript" src="plugins/RunPeriodicTasks/mt-run-periodic-tasks.cgi?blog_id=">
というソースで呼び出しているのですがそのせいでしょうか・・・?
色々と模索しましたが手仕舞いになってしまいまして(汗)
何かヒントをご教授頂ければと思いますm(_ _)m
>tanぽ☆さん
こんにちは。
ご質問の件ですが、システムメニューのプラグインでRunPeriodicTasksプラグインの設定を開き、「タスクの実行間隔」の欄に「60」を入力して、設定を保存してください。
>壱さん
早々のご返答有難う御座いました。
システムメニューからとダッシュボードからの設定項目は
違うのですね(汗)
知らなかったです^^;
無事に時間設定の方が完了致しました。
有難う御座いましたm(_ _)m
タグを挿入した箇所が以下のようなタグに入れ替わります。
<div id="fj_realtime_rebuild_ajax"><p>
<__trans phrase="run-periodic-tasks script is running..."></p></div>
本来、プラグインの設定で設定したタグに置き換わるはずだと思うのですが、
どうしてこのようなことになるのでしょうか。
解消方法がありましたら教えてください。
>なんでかな?さん
こんにちは。
ご質問の件ですが、手順2の初期設定を行って、「変更を保存」ボタンをクリックしてください。
ありがとうございます。
>設定を全く変えない場合も、変更を保存する必要があります。
との記載がありましたね。
お手数をおかけしました。
レンタルサーバの仕様で日時指定ができず困っていたのですが、すばらしいプラグインで感動しました。
ただ、手順どおりにやってみたのですが、どうしてもうまくいかず、タグを埋め込んだ部分に以下のエラーが出てしまいます。。
Got an error: syntax error at ../../lib/MT/Util.pm line 14, near "our @EXPORT_OK " BEGIN not safe after errors--compilation aborted at ../../lib/MT/Util.pm line 33. BEGIN failed--compilation aborted at ../../lib/MT.pm line 13.
MTのバージョンは4.2です。
何か原因はお分かりになりますでしょうか・・
>ゆうきさん
こんにちは。
「Util.pm」はMTのシステムのファイルで、「syntax error」は文法エラーです。
しかし、Util.pmに文法エラーがあることは考えられません。
プラグインのアップロードに何か問題があって、それがUtil.pmのエラーを引き起こしているのではないかと思いますが、申し訳ありませんがはっきりとした原因は不明です。