MT4にはてなスターを設置する

 MT4.01で運営しているマンガ感想サイトに、はてなスターを設置しました。
 MTにはてスタを設置する方法ははてスタ日記に紹介されているのですが、MT4用の設定が書いてあるのに気付いたのは設置した後でした(ヘボ)。
 結果的に、紹介されているのとは違う方法で実装することに成功したっぽいので紹介します。

 はてなスターは「h3」タグがエントリのタイトルとして使用していることを前提としているのですが、MT4の標準のテンプレートでは普通のインデックスでは「h2」を、個別の記事では「h1」をエントリのタイトルとして使用しているので、その辺を修正する必要があります。

ダッシュボード→デザイン→テンプレート→テンプレートモジュール→ヘッダーを選択し、headタグの範囲の適当な位置に以下のコードを追加:

<!-- インデックスページ用 -->
<MTIf name="main_index">
<script type="text/javascript" src="http://s.hatena.ne.jp/js/HatenaStar.js"></script>
<script type="text/javascript">
Hatena.Star.EntryLoader.headerTagAndClassName = ['h2','asset-name'];
Hatena.Star.Token = 'あなたのトークン';
</script>
</MTIf>

<!-- 個別のエントリ用 -->
<MTIf name="entry_archive">
<script type="text/javascript" src="http://s.hatena.ne.jp/js/HatenaStar.js"></script>
<script type="text/javascript">
Hatena.Star.Token = 'あなたのトークン';
Hatena.Star.EntryLoader.loadEntries = function() {
var entries = [];
var divs = Ten.DOM.getElementsByTagAndClassName('h1','asset-name',document.body);
entries.push(new Hatena.Star.Entry.MT4Blog(divs[0]));
return entries;
}
Hatena.Star.Entry.MT4Blog = new Ten.Class({
initialize: function(h1) {
this.title = Ten.DOM.scrapeText(h1);
this.uri = document.URL;
this.comment_container = Hatena.Star.EntryLoader.createCommentContainer();
h1.appendChild(this.comment_container);
this.star_container = Hatena.Star.EntryLoader.createStarContainer();
h1.appendChild(this.star_container);
}
});
</script>
</MTIf>

 インデックスページ(main_index)は h2タグの class=”asset-name” がエントリのタイトルになっているので、「Hatena.Star.EntryLoader.headerTagAndClassName = [‘h2′,’asset-name’];」と記述すれば良いです。
 個別のエントリ(entry_archive)の場合は、h1タグの class=”asset-name” がエントリのタイトルになっているのですが、デフォルトではエントリのタイトルがaタグで括られていないので、単にHatena.Star.EntryLoader.headerTagAndClassNameで設定しただけではスターが適応されません。なので、はてスタ日記に書かれているlivedoor blog用のコードを修正し、h1のasset-nameのみを抽出してそこにスターを適応するコードを追加しています。
 こうすることにより、個別エントリのテンプレートを修正しなくても、ヘッダーのテンプレートを修正するだけでスターを適応できるというメリットがあります。

 もし「はてスタのためだけにエントリのタイトルにaタグを入れるのはイヤだ!」という拘りがある方は、上記の方法を試して頂くといいかも知れません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です