for MOBILE powerd by MT4i
Individual Archive

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なので、更新情報として反映されない。
→実はここで大きな勘違いをしていました。

Trackback :: http://www.loungelabel.com/mt/mt-tb.cgi/644

Post a Comment