T.Takahashi Bloogerで1記事複数ラベルに対して記事一覧を表示させる方法 2017-07-05T06:20:39Z
0;ゼロからはじめる!

Bloogerで1記事複数ラベルに対して記事一覧を表示させる方法

はじめに

記事に対しての関連記事表示方法はいくつかある。

  • RSSリーダを使用する
  • 記事内のラベルを参照してPHPやjavascriptを使用する

などが一般的に関連記事を表示する方法だろう。

Bloggerで関連記事を表示する場合の問題点

Bloggerの場合はラベルが階層化されていない、この一言だろう。 ラベルについての関連性が一番良いのか判断できず、関連性の低い記事が表示される状況となる。そのラベルも「ABC、あいうえお順」となるため使えない。では、苦肉の作として番号をふる(例:001-PC、011-ハードウェア、012-ソフトウェア、002-プリンタ・・・など)とするのも管理するのも大変である。

どのような解決作があるのか?

まずBloggerは、1記事に対して複数のラベルが存在するものと定義する。

上の記事に対するラベルは3つある。では、そのラベルそれぞれの一覧を表示すれば関連記事となると考えられる。

どのように表示するか?

記事に対するラベルの一覧を取得し、そのラベル対して新しい記事より表示させる。

記事一覧のイメージ表示

1記事複数ラベルの関連記事一覧イメージ画像

最終的にこのように表示させる。

こちらのサイトを参考にした

下記コードを見つける

<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> 

表示させたい部分に下記コードを追加する

<b:include data='posts' name='related-posts'/>

さいごに

これでBloggerみたく、1記事複数ラベルであっても関連記事を表示することができる。サムネイルや記事内容などは表示されないシンプルだがひとまずは良しとしよう

スポンサーリンク

0 件のコメント :

コメントを投稿