副作用のない HaloScan
コメント数全表示
アイデア
エントリ「HaloScan コメントへのリンク補正のアイデア 」で二つほどアイデアを書いてみましたが、表示を従来通りにすることに執着すると不必要と思えるほど難しくなってしまいます。簡単にするためのヒントは Thingamablog にありました。
HaloScan が勝手にリンクの文言を書き換えてしまうわけですが、コメントへのリンクと判断するための条件に合わないようにコメントへのリンクを付けて書き換えを抑制します。そして、コメント数が取得できない恐れがあるコメントは自らロードするようにテンプレートに仕込んでおくのです。
エントリページはテンプレート内のどこでも <$EntryUUID$> が使えます。ブログページは最新エントリしか載せないので何もしなくとも全部のエントリのコメントのコメント数は取得できています。問題はカテゴリページでした。カテゴリページは更新頻度の高いカテゴリはブログページと同じで何もしなくてもコメント数は全て取得できます。しかしたまにしか更新しないカテゴリはそうはいきません。
iBlog のテンプレートタグ <ForEachEntry>, </ForEachEntry> に相当する Thingamablog のテンプレートタグ <BlogEntry>, </BlogEntry> は一つのテンプレート内で複数セット使えるのに対し、iBlog ではそうはいきません。一回しか有効でないのです。(不便ですよね。 ) このためそのカテゴリページにあるエントリのコメント群のコメント数を一気に取得するためのコードが書けなくて困っていました。
でも一気に取得できないのなら小分けに取得すればよかったのです。以下に示す方法は、HaloScan の仕様変更によりリンクの文言が変えられてしまうケースで、iBlog において幾つか考えられるそれを正常にする方法の中で最もスマートな部類に入るのではないかと思っています。
安全なコメントの付け方に変更する
まずエントリ「HaloScan のコードをもっと安全に 」に書いた方法でコメントとトラックバックへのリンクを付け替えます。具体的な方法はそのエントリを参照してください。
従来のリンクの表示と文言が変わるのがどうしても気に入らない人はそのエントリからダウンロードできる haloscan.js に多少手を加えてリンクの部分も少し改造すれば以前と同じになります。リクエストがあればエントリにします。
テンプレートの更なる変更
コメントへのリンクがあるのは BlogPage.txt, CategoryPage.txt, EntryPage.txt, MusicEntryPage.txt, FileSharingEntryPage.txtです。それぞれ次の方針で更に変更を加えます。
Blogpage.txt
原則として変更する必要はありません。しかしながら、表示するエントリを新しく投稿したエントリ順以外 にしている場合は CategoryPage.txt と同様の変更が必要です。
CategoryPage.txt
エントリの繰り返しを表すテンプレートタグ <ForEachEntry> から </ForEachEntry> の間でコメントへのリンクの記述が始まる前に次の一行を挿入します。
<script type="text/javascript" src="http://www.haloscan.com/load/HaloScanアカウント /?c=<$EntryUUID$>"></script>
どこに挿入したらよいかよくわからない場合は <ForEachEntry> の直後に入れるのがよいでしょう。
EntryPage.txt
MusicEntryPage.txt
FileSharingEntryPage.txt
head 要素(<head> から </head>)の中で、従来からある HaloScan の JavaScript をロードしている箇所より後ろに一行書き加えます。
従来からあるコード
<script type="text/javascript" src="http://www.haloscan.com/load.php?user=HaloScanアカウント "></script>
書き加えた結果
<script type="text/javascript" src="http://www.haloscan.com/load.php?user=HaloScanアカウント "></script><script type="text/javascript" src="http://www.haloscan.com/load/HaloScanアカウント /?c=<$EntryUUID$>"></script>
トップストーリその他
トップストーリ(常にブログページに表示されるエントリ)や大昔に書いたエントリ「Blog コメント欄を付ける 」で紹介した HaloScan の簡易 BBS として流用を用いているときにはそれらにも個別に対応する必要があります。
トップストーリエントリを頻繁に設定したり設定を解除したりする場合は、BlogPage.txt にも上述の CategoryPage.txt と同様の措置を施すのが手間いらずです。ただし CategoryPage.txt の措置は複数回(エントリの数だけ) HaloScan に問い合わせに行くのでいささか無駄があります。可能な限り以下に述べる方法を用いるのがよいでしょう。
コメントスレッドの ID を調べる。
トップストーリならばそのエントリの UUID、つまりエントリページの URL の中の ENNNNNN という部分(N は数字)です。正確にはそのコメントを表示させたときの URL の中にあります。最近の HaloScan の流儀でしたら次のような URL になるはずです。
http://www.haloscan.com/comments/HaloScanアカウント /スレッドID
この スレッドID の部分がそれです。後ろにスラッシュが付いているかもしれません。それは除いてください。古い流儀でしたら URL は次のようになっているかもしれません。
http://www.haloscan.com/comments.php?user=HaloScanアカウント &comment=スレッドID
この場合も スレッドID の部分が該当します。
head 要素内にコメント数を取得するコードを入れる。
挿入するコードとその位置は上述の EntryPage.txt でのものとほぼ同じです。
BlogPage.txt や CategoryPage.txt などエントリページのテンプレートでないテンプレートには <$EntryUUID$> の代わりに 1 で調べたコメントのスレッド ID を入れます。複数スレッド ID を入れたい場合にはスレッド ID 間を "+" で繋ぎます。カテゴリページではトップストーリは関係ないので、CategoryPage.txt にはトップストーリのスレッド ID (エントリの UUID)は入れなくてもよいです。
EntryPage.txt, MusicEntryPage.txt, FileSharingPage.txt といったエントリページのテンプレートには既に似たようなコードが入っているので、そこに 1 で調べたスレッド ID を書き加えます。エントリページではトップストーリは関係ないので、CategoryPage.txt にはトップストーリのスレッド ID (エントリの UUID)は入れなくてもよいです。<$EntryUUID$> の後ろに '+' を挟んでスレッド ID を書き加えます。複数スレッド ID を入れたい場合にはスレッド ID 間を "+" で繋ぎます。
例としてこのブログのエントリページやカテゴリページの HTML を参照してください。
Posted: 18:46
|
Comment
|
Trackback
Trackback Ping URL(U)
以下、類似エントリです。
JavaScript が有効でないと類似エントリは表示できません。