2005年11月14日 (月)

コメントとトラックバックをエントリ毎に不可にする

iblogPatcher など正規表現による置換ができるツールを使うとエントリ毎にコメントやトラックバックへのリンクを付ける付けないを制御できます。これによって事実上、指定したエントリへのコメントやトラックバックを禁止にできます。単なる告知やトップストーリーなどコメントやトラックバックが必要ないエントリに利用できます。

これの iblogPatcher での実現方法を紹介します。もちろん iBlog での話です。


このエントリでは次のように順を追って説明します。

  1. 前提条件
  2. テンプレートの変更
  3. ブログ定義ファイルの変更
  4. エントリの書き方

前提条件

この措置が有効に働くためには次の条件が必要です。

  • CHANGE_CONTENT.plugin が有効になっている。

    iblogPatcher で iBlog のプレビュー結果を操作するときの基本プラグインなので敢えて無効にしていなければ有効になっています。

  • 各種ページで各エントリについてコメント関連のものトラックバック関連のものが、それぞれ一カ所に固まっている。

    この条件に合わないのは、例えばコメントページへのリンクを表示した上で、それとは離れてコメントページを iframe や object 要素で埋め込み表示している場合です。また、Trackback Auto-Discovery のためのコードだけ離れているということもあるかもしれません。

    このような場合はテンプレートを見直して予めコメント関連のもの、トラックバック関連のものをそれぞれ一カ所に固めておいてください。ここでいう一カ所というのは文字列として一カ所ということであって、XHTML や RSS の要素としてまとまっている必要はありません。

  • XHTML ソース上、エントリの概要より後ろにコメントやトラックバック関連のコードがある。

    別に前にあっても可能なのですがブログ定義ファイルの変更で紹介する記述が後ろにあることを仮定しています。前に書いている人は少ないと思うので、その記述を参考にして工夫するか個別にご相談ください。

テンプレートの変更

変更対象となるテンプレートは

  • BlogPage.txt
  • CategoryPage.txt
  • EntryPage.txt
  • FileSharingEntryPage.txt
  • MusicEntryPage.txt

です。

コメント関連のコードが記述してある箇所を <!-- BEGIN CommentLink --><!-- END CommentLink --> で囲ってください。

<!-- BEGIN CommentLink -->
| <_a href="http://www.haloscan.com/comments/<$HaloScanID$>/<$EntryUUID$>" title="Comments for <$EntryUUID$>" onclick="HaloScan('<$EntryUUID$>'); return false;">Comment<script type="text/javascript">postCount('<$EntryUUID$>');</script></a>
<!-- END CommentLink -->

トラックバック関連のコードが記述してある箇所を <!-- BEGIN TrackbackLink --><!-- END TrackbackLink --> で囲ってください。

<!-- BEGIN TrackbackLink -->
| <_a href="http://haloscan.com/tb/<$HaloScanID$>/<$EntryUUID$>" title="Trackbacks for <$EntryUUID$>" onclick="HaloScanTB('<$EntryUUID$>'); return false;">Trackback<script type="text/javascript">postCountTB('<$EntryUUID$>');</script></a>
<div align="center">
    <label for="TrackbackPingURL">Trackback Ping URL(U)</label><br />
    <input id="TrackbackPingURL" name="TrackbackPingURL" type="text" value="http://www.haloscan.com/tb/<$HaloScanID$>/<$EntryUUID$>" size="56" onfocus="this.select();" onclick="this.select();" readonly="readonly" tabindex="1" accesskey="U" />
</div>
<!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description
    rdf:about="http://homepage.mac.com/yuji_okamura/iblog/DotMac/Tips/<$EntryCategoryUUID$>/<$EntryUUID$>/index.html"
    trackback:ping="http://haloscan.com/tb/<$HaloScanID$>/<$EntryUUID$>"
    dc:title="<$EntryTitle$>"
    dc:identifier="http://homepage.mac.com/yuji_okamura/iblog/DotMac/Tips/<$EntryCategoryUUID$>/<$EntryUUID$>/index.html" />
</rdf:RDF>
-->
<!-- END TrackbackLink -->

ブログ定義ファイルの変更

ブログ定義ファイルの %ACTIONpreview > after > onStart セクションの中に次の記述を入れてください。

# コメント可能ページの置換設定
foreach (
    'BlogPage',
    'CategoryPage',
    'EntryPage',
) {
    my	$targetPage = $_;

    # Comment Disable を有効にする
    push @{$CHANGE_CONTENT::Conf{$targetPage}}, {
        condition => '<!--\s*Comment\s+Disable\s*-->((?:[^<]|<(?!!--\s*BEGIN\s+CommentLink\s*-->))*)<!--\s*BEGIN\s+CommentLink\s*-->(?:[^<]*|<(?!!--\s*END\s+CommentLink\s*-->))*<!--\s*END\s+CommentLink\s*-->',
        replace => '$1',
        'option' => 'gs',
    };

    # Trackback Disable を有効にする
    push @{$CHANGE_CONTENT::Conf{$targetPage}}, {
        condition => '<!--\s*Trackback\s+Disable\s*-->((?:[^<]|<(?!!--\s*BEGIN\s+TrackbackLink\s*-->))*)<!--\s*BEGIN\s+TrackbackLink\s*-->(?:[^<]*|<(?!!--\s*END\s+TrackbackLink\s*-->))*<!--\s*END\s+TrackbackLink\s*-->',
        replace	=> '$1',
        'option' => 'gs',
    };
}

FeedPage.txt の中に comments 要素を入れている人は続けて次の記述も入れてください。

# RSS で Comment Disable を有効にする
push @{$CHANGE_CONTENT::Conf{'FeedPage'}}, {
    'condition'	=> '<!--\s*Comment\s+Disable\s*-->((?:[^<]|<(?!comments\s*>))*)<comments\s*>[^<]*<\/comments\s*>[ \t]*',
    'replace'	=> '$1',
    'option'	=> 'gs',
};

エントリの書き方

ここまでの作業でコメントとトラックバックをエントリ毎に不可にするための設定が終わっています。個々のエントリについてそれぞれ不可と指定するには次のコードをエントリの概要に書きます。

コメントを不可にする場合
<!-- Comment Disable -->
トラックバックを不可にする場合
<!-- Trackback Disable -->

この XHTML のコメントの記述は本当に XHTML のコメントになるようにしてください。エントリ編集画面でそのまま書くと &lt;!-- Comment Disable --&gt; というように html ファイルには書き込まれてしまいます。<HTMLCode></HTMLCode> で囲んで書きます。

例としてこの機能のテストとデモンストレーションのためのエントリ「HiTsu さんのリクエストのテスト」の概要に書いた内容を掲載しておきます。

<HTMLCode><!--</HTMLCode>
<HTMLCode>
-->
<_a href="http://www.haloscan.com/comments/yujiokamura/E20051113142442/#C353109" title="HaloScan.com - Comments">HiTsu さんのリクエスト</a>にお応えするためにちょっとテストです。
<!-- Comment Disable -->
<!-- Trackback Disable -->
</HTMLCode>

Posted: 13:29    | Comment | Trackback


以下、類似エントリです。