クリボウの Blogger Tips

Google Blogger の使い方、カスタマイズ方法、各種ツールなど、
Blogger 関連の役立つ情報を紹介しています。

> | > Blogger で「関連記事」リストを表示する 2 つの方法

Blogger で「関連記事」リストを表示する 2 つの方法

Posted at: 2009-08-04 Label: , 15

ブログの投稿の最後に、その投稿に関連する投稿のリストを表示する方法です。
今回参考にさせてもらったのは、

の 2 ブログ。
Blogger カスタマイズサイトがいくつも出てきて、脅威を感じているところです(汗)。


ラベルごとの関連記事

最初は

で紹介されている方法。
写真日記にとりつけてみたところ、下の画像のようになりました。



記事単独のページにラベルごとに数件のリンクを表示します。
上の例では、この下に「Nikon D80」ラベル、「昆虫」ラベル、「蝉」ラベルの投稿へのリンクが表示されました。
ラベルやラベルごとのリンク数は、ユーザーが指定することが可能です。

導入方法

1.Blogger 管理画面「レイアウト > HTML の編集」ページで「ウィジェットのテンプレートを展開」にチェックを入れます。

2.テンプレートのテキストエリアから、
<b:includable id='main' var='top'>
を見つけ出し、その前の行に
<b:includable id='related-posts' var='posts'>
<b:if cond='data:blog.pageType == &quot;item&quot;'>
<div class='similiar'>
<div class='widget-content'>
<h3>Related Post:</h3>
<div id='data2007'/><br/>
   <script type='text/javascript'>

   var homeUrl3 = &quot;<data:blog.homepageUrl/>&quot;;
   var maxNumberOfPostsPerLabel = 6;
   var maxNumberOfLabels = 3;

   function listEntries10(json) {
   var ul = document.createElement(&#39;ul&#39;);
   var maxPosts = (json.feed.entry.length &lt;= maxNumberOfPostsPerLabel) ? 
                 json.feed.entry.length : maxNumberOfPostsPerLabel;
   for (var i = 0; i &lt; maxPosts; i++) {
   var entry = json.feed.entry[i];
   var alturl;

       for (var k = 0; k &lt; entry.link.length; k++) {
         if (entry.link[k].rel == &#39;alternate&#39;) {
           alturl = entry.link[k].href;
           break;
         }
       }
       var li = document.createElement(&#39;li&#39;);
       var a = document.createElement(&#39;a&#39;);
       a.href = alturl;

if(a.href!=location.href) {
   var txt = document.createTextNode(entry.title.$t); 
   a.appendChild(txt);
   li.appendChild(a);
   ul.appendChild(li); 
}
   }
     for (var l = 0; l &lt; json.feed.link.length; l++) {
       if (json.feed.link[l].rel == &#39;alternate&#39;) {
         var raw = json.feed.link[l].href;
         var label = decodeURIComponent(raw.substr(homeUrl3.length+13));
         var txt = document.createTextNode(label);
         var h = document.createElement(&#39;b&#39;);
         h.appendChild(txt);
         var div1 = document.createElement(&#39;div&#39;);
          div1.appendChild(h);
         div1.appendChild(ul);
         document.getElementById(&#39;data2007&#39;).appendChild(div1);
       }
     }
   }
   function search10(query, label) {

   var script = document.createElement(&#39;script&#39;);
   script.setAttribute(&#39;src&#39;, query + &#39;feeds/posts/default/-/&#39;
    + label +
    &#39;?alt=json-in-script&amp;callback=listEntries10&#39;);
   script.setAttribute(&#39;type&#39;, &#39;text/javascript&#39;);
   document.documentElement.firstChild.appendChild(script);
   }

   var labelArray = new Array();
   var numLabel = 0;

   <b:loop values='data:posts' var='post'>
     <b:loop values='data:post.labels' var='label'>
       textLabel = &quot;<data:label.name/>&quot;;
     
       var test = 0;
       for (var i = 0; i &lt; labelArray.length; i++)
       if (labelArray[i] == textLabel) test = 1;
       if (test == 0) { 
          labelArray.push(textLabel);
          var maxLabels = (labelArray.length &lt;= maxNumberOfLabels) ? 
                 labelArray.length : maxNumberOfLabels;
           if (numLabel &lt; maxLabels) {
             search10(homeUrl3, textLabel);
             numLabel++;
          }
       }
     </b:loop>
   </b:loop>
   </script>
</div>
</div>
</b:if>
</b:includable>
というコードを貼り付けます。コードを見つけるのにはブラウザの検索機能が便利です。赤字の部分は、上からタイトル、ラベルごとの投稿リンク数、表示ラベル数を表していて、ユーザーで変更が可能です。

3.次に、テキストエリアから
<div style='clear: both;'/> <!-- clear for photos floats -->
というコードを見つけ出し、その次の行に
<b:include data='posts' name='related-posts'/>
を挿入します。

これでおしまい。ちなみに

ラベルが日本語だと下の画像のようになり、正常に表示されません。
但し、最大の問題は日本語のラベルが文字化けすること。

という問題があったため、日本語ラベル名の URL エンコードをデコードするよう、コードを修正しています(青字部分)。なので、ブログの投稿に日本語ラベルをたくさんつけていても大丈夫。


3行コピペでできる方法

2つめは、

で紹介されている方法。
本家のプロジェクトページはこちらです。

それを写真日記にとりつけてみたのがこの画像です。



重複するラベルの多い順にリンクを並べているようで、元の投稿「蝉の抜け殻」に対して、かなり正確な関連記事が表示されています。

導入

1.Blogger 管理画面「レイアウト > HTML の編集」ページで「ウィジェットのテンプレートを展開」にチェックを入れます。

2.テンプレートのテキストエリアから、
<div style='clear: both;'/> <!-- clear for photos floats -->
を見つけ出し、その次の行に
<div id='related_posts'/>
というコードを挿入します。コードを見つけるのはやっぱりブラウザの検索機能で。

3.次にテキストエリアの最後の方から、
</body>
</html>
というコードを見つけ、その前の行に
<script type='text/javascript' src='http://www.google.com/jsapi' />
<script type='text/javascript' src='http://brps.appspot.com/brps.js' />
というコードを貼り付けます。

これでおしまい。簡単です。

またオプションとして、タイトルと投稿リンクの表示数を指定することもできます(標準は「Related Posts」で 10 件)。
その場合は、3で貼り付けるコードを
<script type='text/javascript' src='http://www.google.com/jsapi' />
<script type='text/javascript'>
window.brps_options = {"title": "<h3>関連記事</h3>", "max_results": 5}
</script>
<script type='text/javascript' src='http://brps.appspot.com/brps.js' />
という風に、書き換えてください。


スポンサードリンク:
お願い:
「この記事役に立った!」と思ったら、ぜひフィード登録をお願いします。 

Comments:15

  1. 貴重な Tips ありがとうございました。さっそく導入させていただきました。

    ReplyDelete
  2. こんにちは。
    これはスゴイ。
    悩みが2つとも一気に解決しました。
    この Tips で何万人の Google Blogger ユーザが救われることか。
    本当にありがとうございました。

    ReplyDelete
  3. 訪問とリンクどうもありがとうございます。「Bloggerカスタマイズ情報ブログ」のChocoです。
    Kuriboさんのブログを参考に、関連記事のコードを一部修正して日本語にも対応できるようになりました。

    ReplyDelete
  4. はじめまして、こんにちは。
    いつも参考にさせて頂いてます。

    このTip、早速自分のブログに導入させて頂きました。

    ありがとうございました。

    ReplyDelete
  5. > 余丁町散人さん
    はーい、どういたしましてです。

    > ManFai さん
    > この Tips で何万人の Google Blogger ユーザが救われることか。
    おはずかしいです。この記事は ManFai さんの記事に完全に便乗させていただきました。重ね重ね、ありがとうございました。

    > Choco さん
    こちらにまでコメントにきてくださって、ありがとうございます。これからも貴重な Blogger ネタ、よろしくお願いします。

    > Hayden さん
    はじめまして、コメントありがとうございます。これからもこのブログをよろしくお願いします。

    ReplyDelete
  6. いつもかなりお世話になってます<(_ _)>
    この内容すごい悩んでました。
    さっそく試してみます。
    ありがとうございます。

    ReplyDelete
  7. こんにちは!

    面白そうなので試してみました!


    が・・・反映されず・・・。
    テンプレートによっては反映されなかったりするのでしょうか?
    ちなみにテンプレートは「thisaway Green」です。

    ReplyDelete
  8. > koumkj さん
    どうしたしましてです。
    記事がお役に立って嬉しいです。

    > どりどりさん
    できませんでしたか、残念です。
    テンプレートによっては無理かもしれませんね。

    ReplyDelete
  9. 参考になりました。
    関連記事無事表示しました。
    がしかし、関連記事の欄には枠線を表示させたかったのですが、どこを触ればいいかわからず、迷っております。

    ReplyDelete
  10. こんにちは。ようやく念願の関連記事を表示させることができました。Bloggerはそのシンプルさ故に、欲しい機能が足りないなあ、と思うのですが、クリボウさんの情報にはいつも助けられています。

    ReplyDelete
  11. 関連記事を表示する方法。最新版を、是非書いてください。
    また、招待制のようなBlogでも、関連記事表示できるのでしょうか?

    BRPS発行キーを、取りに行こうとしたら、もう、キー取れないし。。。
    どうか、よろしくお願いします。

    ReplyDelete
  12. ありがとうございました!
    HTMLに明るくない自分でもサクっと反映することが出来ました。

    ReplyDelete
  13. こんにちは。
    関連記事は順調に機能していたのですが、後にラベルを追加したところ、その追加したラベルのみ関連記事が表示されません。

    つまり前よりあるラベルに関しては関連記事が表示されます。

    どこかソースをいじらなければならないのでしょうか?ご教示お願いいたします。

    ReplyDelete
  14. 記事参考にさせていただきました。
    最終的にはこちらで紹介されている方法ではない方法で表示させる事にしたのですが、無事表示出来たので良かったです。
    ありがとうございました。とても参考になる記事でした。

    ReplyDelete
  15. ブログでやってみたのですが、表示すらされなくて真っ白…。
    いろいろな関連記事サービス使いましたがどれも真っ白で使い物になりません…。

    ReplyDelete

Comments on Google+:

© 2005-2014 Kuribo. Powered by Blogger.