お知らせ
2008年4月8日
「Movable Typeプロフェッショナル・スタイル」が発売されました。
Movable Typeの第一線に関わる人々の共著で、Movable Typeをビジネスサイト構築に活かすテクニックが満載です。
Movable Typeでサイト構築を行っているWeb制作会社等の方々にお勧めです。
他にも多数書籍を執筆しています。
こちらもぜひご覧ください。
「ほぼ」指定日投稿(JavaScript版)
2008年5月25日 さらに改良したバージョン2.10を公開しました。
2.10をお使いください。
2006年10月4日 Ajaxを使ってFlashと同様の表示ができるように改良しました。
Movable Typeには「指定日投稿」の機能があり、指定した日時に自動的にエントリーを投稿することができます。
ただし、そのためには指定日投稿のスクリプトを定期的に実行する必要があります。
cronを使えないサーバーだと、スクリプトを定期的に自動実行することができません。
そこで、以前から「ほぼ」指定日投稿というプログラムを公開していました。
Blogのテンプレートに、指定日投稿のスクリプトを呼び出すためのFlashを入れておき、Blogにアクセスがあったときに、そのFlashによってスクリプトが実行されるという仕組みです。
ただ、Flash Player 9ではこのFlashがうまく動作しないとの報告をいただいています。
そこで、Flashを使わずに、JavaScriptを使うタイプのプラグインを作りました(Movable Type 3.2以降に対応)。
1.プラグインのダウンロード
まず、以下のアドレスからプラグインのファイルをダウンロードします。
プラグインの継続的な開発やサポートのために、プラグインをご利用された方は、ドネーション(寄付)を行っていただけると幸いです。
ドネーションの方法は、こちらのページをご参照ください。
ファイルを解凍すると、「RunPeriodicTasks」と「image」の2つのフォルダができます。
「RunPeriodicTasks」フォルダを、Movable Typeの「plugins」ディレクトリの中にアップロードします。「image」フォルダはそのままおいておきます。
そして、RunPeriodicTasksディレクトリ内の「mt-run-periodoc-tasks.cgi」のパーミッションを755等に変えて、実行可能にします。
なお、MTの文字コードの設定をutf-8以外にしている方は、その文字コードに変換してアップロードします。
2.Ajaxを使わない場合のテンプレートの書き換え
Ajaxを使わない場合は、メインページやエントリーアーカイブなど、表示頻度が高いページのテンプレートで、ほぼ指定日投稿の結果を表示したい位置に以下のタグを入れます。
このタグはJavaScriptに変換され、そのJavaScriptからほぼ指定日投稿のCGIが呼び出されます。
<$MTRunPeriodicTasksJS$>
なお、このタグはページの最後に近い箇所(サイドバーの最後の方など)に入れることをお勧めします(CGIの実行が終わるまで、ページの表示が進まないため)。
2.Ajaxを使う場合のテンプレートの書き換え
Ajaxを使う場合は、以下のような手順を取ります。
・prototype.jsの入手
まず、以下のサイトからprototype.jsを入手し、Blogの出力先ディレクトリにアップロードします。
Prototype JavaScript Framework
・テンプレートの書き換え
メインページやエントリーアーカイブなど、表示頻度が高いページのテンプレートを開きます。
そのテンプレートのヘッダー部分に、以下のタグを入れます。
<script type="text/javascript" src="<$MTBlogURL$>prototype.js"></script>
また、ほぼ指定日投稿の結果を表示したい位置に以下のようなタグを入れます。
このタグはJavaScriptに変換され、そのJavaScriptからほぼ指定日投稿のCGIが呼び出されます。
<div id="run_periodic_tasks"><p>Now running periodic tasks...</p></div> <$MTRunPeriodicTasksJS ajax="1" tag_id="run_periodic_tasks"$>
なお、Ajaxを使わない場合と異なり、このタグはテンプレートのbodyタグ内のどこにでも入れることができます。
4.指定日投稿を行う
後は、エントリーを書く際に「公開の状態」を「指定日」に設定し、「エントリーの投稿日時」を未来の日時にして保存するだけです。
指定の日時を過ぎた後に誰かがBlogにアクセスすると、「ほぼ」指定日投稿のCGIが実行され、エントリーが投稿されます。
ただし、指定日投稿のスクリプトを頻繁に実行すると、サーバーに負荷がかかります。
そこで、「ほぼ」指定日投稿のCGIでは、指定日投稿のスクリプトを一度実行すると、その後15分経過するまでは、指定日投稿のスクリプトを実行しないようにしています。
5.「ほぼ」指定日投稿の実行結果の表示をカスタマイズする
「ほぼ」指定日投稿のCGIが実行され、そこから指定日投稿のスクリプトが実行されると、scriptタグを入れた位置に「OK」と表示されます。
また、指定日投稿のスクリプトを一度実行してから15分経過していないうちに、指定日投稿のCGIが再度実行されると、scriptタグの位置に「Skipped」と表示されます。
この表示を変えることもできます。
Blogのメニューで「環境設定」の「設定」をクリックして設定のページを開き、「プラグイン」のタブに切り替えます。
プラグインが一覧表示されますので、「Run Periodic Tasks」のところの「設定を表示」をクリックします。
これで、指定日投稿のスクリプトが実行されたときと、その実行がスキップされたときに表示する内容を設定することができます。
なお、プラグインのファイルを解凍したときに「image」というフォルダができましたが、そのフォルダには、指定日投稿スクリプトの実行結果に対応したボタンの画像があります。
その画像を表示するように設定すると良いでしょう。
前後の記事
関連するエントリー(1件)
- cronを使わずに(ほぼ)指定日投稿をする(2005年05月15日 16:00)
トラックバック(8件)
このブログ記事を参照しているブログ一覧: 「ほぼ」指定日投稿(JavaScript版)
このブログ記事に対するトラックバックURL: http://www.h-fj.com/mt/mt-tb.cgi/624.
cronを使わないエントリー指定日投稿プラグインが無いか探していたら、ズバリあり... 続きを読む
指定日時に記事を投稿する場合、システムでスクリプトを走らせなければならなかったのですが、指定Java... 続きを読む
cronが使えないロリポップでは指定日投稿が使えないのか…と思ってましたが、Ja... 続きを読む
Movable Typeでは、サーバーのcronという機能を使って指定日投稿ができます。しかしロリポップなど、cronが使えないレンタルサーバーもあります... 続きを読む
で、前回ではMovableType(=以下MT)がインストールして動作するところ... 続きを読む
今週一週間、「モチベーションを高める方法」について、 記事を書いてみました... 続きを読む
このブログはMovable Type 4.1を使用しています。 あらかじめ定めら... 続きを読む


コメントはスレッド表示になっています。
また、スレッドの先頭のコメントに対する返信には、先頭に矢印を表示しています。
プラグインについてご質問をされる方は、ご自分のBlogのURLを必ず入力してください。
また、プラグインの開発やサポートを継続的に行えるようにするために、ドネーション(寄付)をしていただけると幸いです。
金銭的寄付だけでなく、精神的寄付も歓迎します。
ドネーションのページはこちら
どうしても、指定日投稿になりません・・・(泣
Ajaxを使用しない方でやっているのですが、結果が反映されません。
ソースを入れる場所などに細かな指定はあるのでしょうか?
>アズミさん
こんにちは。
ページを表示した時に、<$MTRunPeriodicTasksJS$>タグを入れた箇所に何かメッセージが表示されているでしょうか。
何も表示されていないとすると、何らかの原因でJavaScriptが実行されず、そのために指定日投稿が行われていないということが予想されます。
なお、タグを入れる位置は、<body>~</body>の間であれば、細かな指定はありません。
ただし、説明にも書いたように、ページの最後の方に入れておく方が良いです。
壱さん>
現状は、のタグを入れたところには何も表示されない状態です
いろいろとやってみて、
が生成するソース
をテンプレートに直で書いてみたら、
指定日をすぎていたエントリーが公開されました・・・
これは、、、
正しい動作ではないですよね?
を入れた部分にも「OK」や「skip」は表示されませんでした・・・
何がおかしいんだろう
壱さん>
スイマセン、自己レスです。
ソース書いたんですが、消えてしまいました。
現状は、$MTRunPeriodicTasksJS$のタグを入れたところには何も表示されない状態です
いろいろとやってみて、
$MTRunPeriodicTasksJS$ が生成するソース
script type="text/javascript" src="http://www.XXX.com/cgi/mt/plugins/RunPeriodicTasks/mt-run-periodic-tasks.cgi?blog_id=XX">
をテンプレートに直で書いてみたら、
指定日をすぎていたエントリーが公開されました・・・
これは、、、
正しい動作ではないですよね?
$MTRunPeriodicTasksJS$ を入れた部分にも「OK」や「skip」は表示されませんでした・・・
何がおかしいんだろう
自己レスですいません、
いろいろと調べたところ、$MTRunPeriodicTasksJS$ を設置して指定日投稿をすると、
指定時間を過ぎてもサイト自体に変化は無いのですが、
管理画面からエントリー一覧を見ると、状態が「公開」になっていました。(時計マークが緑のチェックマークに変化)
プラグイン>RunPeriodicTasksの詳細を見ると、
最終実行日時が、2000/01/01 00:00:00、になっている。
という状態です。
エントリー一覧で公開のマークがついているので、この原因はプラグインとは関係ないのでしょうか?
>アズミさん
こんにちは。
このプラグインは、MT内部の指定日投稿処理を呼び出す働きをしています。
MT内部の指定日投稿処理は、平たく言えば、エントリーのステータスを公開に変え、そのエントリー(およびそれに関連する各テンプレート)を再構築する処理です。
お書きになっている状況からすると、以下のような動きになっているようです。
・MT内部の指定日投稿処理に入って、エントリーのステータスを公開に変えるところまでは成功。
・その後に各ページを再構築するところで、何らかのエラーが起こって再構築に失敗。
・これによって、当プラグインのCGIの動作が中断。
・その結果、MTRunPeriodicTasksJSタグを入れた箇所に何も表示されなない。
ただ、何が原因で再構築に失敗しているかは、申し訳ありませんが、そちらの環境で動作を追って見ないと、分かりそうにありません。
スクリプトを利用させていただいております。
初めはjavascript版を設置したところ、出力ファイルがphpだからなのか動作しませんでした。
ajax利用版にかえたら動作はするものの、結果表示がブログ内に表示されず次ページに飛んでしまいます。
OKでもSKIPPEDでも同じです。
あらためてページを戻すと、
document.write('
OK
');
OK
と、タグを挿入したところに表示されます。
設置の仕方が悪かったのでしょうか?
よろしくご教授ください。
>ぼりさん
こんにちは。プラグインご利用ありがとうございます。
まず、プラグインのRunPeriodicTasks.plファイルの中で、58行目を以下のように修正してください。
修正前:
parameters: 'blog_id=$blog_id&ajax=1',
修正後:
parameters: 'blog_id=$blog_id&ajax=1',
また、そちらのページを見ると、「<div id="run_periodic_tasks"><p>Now running periodic tasks...</p></div>」が2箇所にあります。
どちらか片方を削除してください。
早速修正してみましたが、やはり同じような現象が起こります。
何が違うんでしょうか?
ご指摘の箇所は修正しました。ありがとうございます。
>ぼりさん
こんにちは。
そちらのページを拝見しましたが、どうも原因がよく分かりません。
Ajaxがうまく動作していないように見えます。
問題を解決するには、そちらにログインして動作を追ってみるしかなさそうです。
ものすご~く初心者な質問ですが、prototype.jsをブログの出力先ディレクトリに入れるというのは、簡単に言うとうちでいえばhttp://~/bonbori/にいれるというので良いんでしょうか?
現状ではそうなっているのですが・・・
>ぼりさん
こんにちは。
prototype.jsのアップロード先は、現状の通りで正しいです。
また、CGI自体も正しく動作しています。
ところが、AjaxでCGIを呼び出すと、なぜかページが勝手に移動してしまっているという状況です。この原因が不明です。
どうもアクセス解析を見てみると、設置当初から症状は出ていたようです。
他のプラグインが影響しているのか、何が影響しているのか・・・
実は『秘密のコメント』でも躓いております・・・
少しアタマを冷やしてみます。
またよろしくお願いします。
先日表示が上手くいかないとご相談したぼりです。
あれからMT4にバージョンアップし、ajax版『ほぼ指定日投稿』を導入してみると違うページに飛ぶこともなく動作しました。
ありがとうございます。
で、設置して気がついたのですが、テンプレートの変更で『<script type="text/javascript" src="prototype.js">』を入れるとありますが、それでは動作せず表示もおかしかったので『</script>』を加えたところ動作しました。
以前のうまくいかなかったのはこれが影響しているのでしょうか?
とりあえずご報告まで。
>ぼりさん
こんにちは。
エントリーの間違いをご指摘いただき、ありがとうございました。
%lt;/script>タグがないために、JavaScriptが正しく読み込まれず、動作していなかったものと思われます。
メールフォームの方で一度ご連絡させていただいたのですが、送信がエラーになってしまっていたようなので、再送させていただきます。重複してしまった場合はご容赦ください。
cronを使えないサーバのため、Javascript版の「ほぼ指定日更新」のプラグインを試させていただいています。
現在、二つのブログを使っていて、(MTのインストールは一つで、二種類のブログを登録している状態です)親サイトと、その中のディレクトリの
一つ下の階層にもう一つのサイトがあるような形になっています。
今回、「ほぼ指定日更新」のプラグインを導入させていただいたところ、ひとつのサイトでは問題なく指定日更新ができるのですが、もう一つのサイトでは、指定日になっても更新されないままになってしまいます。片方のサイトで機能していることを考えると、テンプレートの中での記述のしかたが悪いのでしょうか?
両サイトとも、「footer」のモジュールの中に
の記述を入れています。
試しに、「index.html」の中に入れたりもしてみましたが、結果は同じでした。
考え得る範囲でいろいろ試してはみたのですが、どうしても解決できなかったためご相談させていただきました。
どうぞよろしくお願いいたします。
>plumさん
こんにちは。プラグインご利用ありがとうございます。
ご質問の件ですが、指定日投稿が行われない方のブログで、MT標準のダイナミック・パブリッシングを使っているということはないでしょうか。
過去に、ダイナミック・パブリッシングでは指定日投稿が正しく働かなかった経験があります。
ちなみに、このプラグインではMT内部の指定日投稿の処理を単に呼び出しているだけす。
そして、その処理では、同一のMTで管理しているすべてのブログの指定日投稿を一度に行うようになっています。