CMSとしてMovableTypeを使用する場合を想定します。
記事として扱われる情報は、外部にお知らせする情報(ニュースリリースなど)と、内部で完結する情報(メモ書きなど)に大きく分けることができます。
ここでUpdatePingの扱いが問題になります。
内部向けの情報はUpdatePingは必要無いことがほとんどです。
しかし現在のMovabletypeの仕様では、UpdatePingはweblog内の記事に対して一律に適用されます。
つまり単一weblogのUpdatePingから見ると、情報(記事)の切り分けができないのです。
これを解決するには複数weblog(内部記事用/外部記事用)を組み合わせることによるUpdatePing競って気の切替が必要になりますが、複数weblogの連携は面倒な構築作業を必要とします(要:multiblogプラグイン)
そこでカテゴリ毎にUpdatePingの有無を設定できるCode Hackをして見ました。
Perl初挑戦なのでコードが汚いです。
...もしかしたら、すでに同種のことをやっている人がいるかも。
[仕様]
・Local Site Pathにあるping_category.txtを参照し、UpdatePingを許可するCategoryを判断する。
・Categoryが設定されていない記事のUpdatePingは許可する。
・ping_category.txtが無い場合、すべての記事のUpdatePingは許可する。
・ping_category.txtはweblog毎に作成可能である。
[手順:Movabletype Ver3.15-jaで確認]
1:新規テンプレートで"ping_category.txt"を作成し、UpdatePingを許可するカテゴリの名前を列記して保存する。
2:/(MT PATH)/lib/MT.appを開く。
3:MT.appの1058行目付近のsub need_ping()を確認。
4:if (!$old_status || $old_status ne MT::Entry::RELEASE()) { ... }を以下のコードに置き換える。
if (!$old_status || $old_status ne MT::Entry::RELEASE()) {
#20050317 by S.Nishikata
# Category Ping Check
# START
use FileHandle;
my %ping_category_list;
my $ping_category = $blog->site_path . "/ping_category.txt";
my $fh = FileHandle->new($ping_category);
my $send_updates = 1;
if($fh){
$send_updates = 0;
while (<$fh>) {
chomp;
$ping_category_list{$_} = 1;
}
if ($entry) {
my $now_cats = $entry->categories;
if($now_cats){
for my $now_cat (@$now_cats) {
if($now_cat){
my $category_label = $now_cat->label;
if ($ping_category_list{$category_label}) {
$send_updates = 1;
}
}
}
}
}
}
if($send_updates == 1){
my @updates = $mt->update_ping_list($blog);
@list{ @updates } = (1) x @updates;
$list{$mt->{cfg}->MTPingURL} = 1 if $blog && $blog->mt_update_key;
}
# my @updates = $mt->update_ping_list($blog);
# @list{ @updates } = (1) x @updates;
# $list{$mt->{cfg}->MTPingURL} = 1 if $blog && $blog->mt_update_key;
#END
}
5:MT.appを保存してサーバにアップロード。
※カテゴリの設定にTrackbackURLを設定できる項目があるが、PingサーバのURLを記述してもサーバに送信されるのはTrackbackPingなので、更新情報として反映されない。
→実はここで大きな勘違いをしていました。
