2013年8月20日火曜日

bloggerに「いいねボタン」を設置する際に陥りやすい罠

必要性を感じて広告無しで使えるブログサービスを探していてbloggerに辿り着いた。
記念すべき1つ目の記事になる訳だけど下準備として「いいねボタン」を付けたい。

参考にしたのは以下の2つの記事。
『Blogger』でFacebookの「いいね!」ボタンを設置するときに引っかかったポイント
blogger に facebook の Like(いいね)ボタンAdd Star

書かれた通りにやっていたが最初は上手くいかなかった。
忍者ツールズのサービスで出来たからいいやというような解決策もあったが、できてる人がいるんだからこのまま、別の方法に行くのも性格上嫌なのであれこれ調べてみた。



基本的には<body>タグの直後に

<b:if cond='data:blog.pageType == "item"'>
  <div id="fb-root"></div>
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/ja_JP/all.js#xfbml=1";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
</b:if>
を貼り付けて

<data:post.body>の直後に

<b:if cond='data:post.isFirstPost'>
<div class="fb-like" expr:data-href="data:post.canonicalUrl" data-width="450" data-layout="button_count" data-show-faces="false" data-send="true"></div>
</b:if>
を貼り付ける。これは概ね間違ってはいない。
だが人によっては「いいねボタン」が出ない場合があるはずだ。
自分の場合もこれに陥った。

なぜ出ないかといろいろ調べていくうちに、どうやら<data:post.body>というタグがbloggerのテンプレートの中に複数あり、追加する場所を間違えると「いいねボタン」が表示されないという所にいきついた。


    <b:if cond='data:blog.metaDescription == ""'>
      <!-- Then use the post body as the schema.org description,
          for good G+/FB snippeting. -->
      <div class='post-body entry-content' expr:id='"post-body-" + data:post.id' itemprop='description articleBody'>
        <data:post.body/>
        <div style='clear: both;'/> <!-- clear for photos floats -->
      </div>
    <b:else/>
      <div class='post-body entry-content' expr:id='"post-body-" + data:post.id' itemprop='articleBody'>
        <data:post.body/>
        <div style='clear: both;'/> <!-- clear for photos floats -->
      </div>
    </b:if>
全てのテンプレートで同じようになっているのかは分からないが条件分岐のある<b>タグの直後に入れてやると上手く表示される。
自分の使っている「シンプルテンプレート」では<data:post.body>は全部で3つあった。その内の2つが上に書いた部分に出ている。
正確には<data:post.body>の直後では無く、<data:post.body>を包括している<b:if></b:if>の直後だ。

これで解決すると思う、というか自分は解決したので同じような悩みの人の為にメモ。



0 件のコメント:

コメントを投稿