2012年05月02日に投稿

[Movable Type]定期的に全てのブログを再構築するプラグインを作りました

Movable Typeには日時指定投稿機能があり、crontabを使ってrun-periodic-tasksを定期的に実行するとその機能を実現することができます。しかしながらエントリーの再構築ができても、他のブログからそのエントリーを読みだしていた場合はそのブログの再構築までは行なってくれません。そこで、作った全てのブログを定期的に再構築するプラグインを作成しました。MTOS 5.13で動作確認しました。

機能
run-periodic-tasksが実行された時に全てのブログを再構築します。
ダウンロード
使い方
mtのpluginディレクトリにファイルをアップロードしてください。あとはcrontabでrun-periodic-tasksを定期実行するようにすれば完了です。
動作環境
MTOS 5.13で動作確認しました。4.xは確認していませんが、たぶん動くかもしれません。
ソースコード
大したものでもないのでソースコードを公開します。誤りのご指摘等フィードバックを頂けると嬉しいです。

[perl]
package MT::Plugin::PeriodicRebuildAllBlogs;

use MT;
use MT::Task;
use MT::WeblogPublisher;

use base qw( MT::Plugin );

my $plugin = new MT::Plugin({
name => ‘PeriodicRebuildAllBlogs’,
key => ‘PeriodicRebuildAllBlogs’,
author_name => ‘Suzuki Toshinari’,
author_link => ‘http://suzuki.toshinari.jp/’,
version => ‘0.1’,
description => ‘run-periodic-rebuildが実行された時に全てのブログを再構築します。’
});

MT->add_plugin($plugin);

# 再構築のサブルーチンをタスクに登録します。
# frequency は指定した秒数以内に同じ処理を実行しなくなります。
MT->add_task(new MT::Task({
name => ‘PeriodicRebuildAllBlogs’,
key => ‘PeriodicRebuildAllBlogs’,
frequency => 10,
code => \&rebuild_all_blogs
}));

# 再構築を行うサブルーチンです。
sub rebuild_all_blogs{

# 再構築の機能を利用するにはMT::WeblogPublisher を利用します。
my $rbld = MT::WeblogPublisher->new;

# 全てのブログをイテレーターとして取得します。
# 取り出されたブログIDの数だけ再構築を実行します。
my $iter = MT->model(‘blog’)->load_iter();
while(my $blog = $iter->()){
$rbld->rebuild(
BlogID => $blog->id
);
}
}

1;
[/perl]

githubのアカウントを作ったのでそこにも放り込んでみたいと思っています。使い方がまだ分からないですが…

関連記事

Leave a Reply