ページ

2008年12月25日木曜日

Bloggerのラベルをラベルクラウド化する方法

Google Bloggerのラベル(Label)は他のブログサービスのタグ(Tag)に相当する文書のフリーキーワードリストです。Bloggerにはカテゴリー(Category)という概念が無いから訪問者が同じトピックの投稿記事を探すときにはラベルに頼ることになります。そこで投稿記事を探しやすくするためにラベルをたくさん付けることになるのですが、そうなるとサイドバーのラベルの欄がやたらと縦に長くなってしまいブログ画面のバランスがあまりよくないように見えます。

海外の"phydeaux3"でBlogger用のラベルクラウドを作るコードが紹介されています。これを導入するとタグクラウドと同じようにラベルをクラウド化することができます。


ダッシュボードから「レイアウト」-「HTMLの編集」を開きます。「ウィジットのテンプレートを展開」のティックは不要です。

HTMLコードから次の記述を探します。1箇所しかありません。

]]></b:skin>

この記述の直上に次のコードを貼り付けます。


/* Label Cloud Styles
----------------------------------------------- */
#labelCloud {text-align:center;font-family:arial,sans-serif;}
#labelCloud .label-cloud li{display:inline;background-image:none !important;padding:0 5px;margin:0;vertical-align:baseline !important;border:0 !important;}
#labelCloud ul{list-style-type:none;margin:0 auto;padding:0;}
#labelCloud a img{border:0;display:inline;margin:0 0 0 3px;padding:0}
#labelCloud a{text-decoration:none}
#labelCloud a:hover{text-decoration:underline}
#labelCloud li a{}
#labelCloud .label-cloud {}
#labelCloud .label-count {padding-left:0.2em;font-size:9px;color:#000}
#labelCloud .label-cloud li:before{content:"" !important}
次に、同じ]]></b:skin>の直下で</head>よりも上の位置に次のコードを貼り付けます。

<script type='text/javascript'>
// Label Cloud User Variables
var cloudMin = 1;
var maxFontSize = 20;
var maxColor = [0,0,255];
var minFontSize = 10;
var minColor = [0,0,0];
var lcShowCount = false;
</script>

ラベルのガジェットをラベルクラウド用に差し替えます。もしラベルガジェットを追加していない場合は、「ページ要素」で「ラベル」を先に追加しておきます。

HTMLから次の記述を探します。
英語環境設定の場合、titleは英語のLabelで記述されています。

<b:widget id='Label1' locked='false' title='ラベル' type='Label'/>
この<b:widget id='Label1'・・・の行から</b:widget>までがラベルガジェットです。
まずはこの範囲を特定してください。

特定したラベルガジェットを下記のコードで上書きします。

<b:widget id='Label1' locked='false' title='Label Cloud' type='Label'>
<b:includable id='main'>
  <b:if cond='data:title'>
   <h2><data:title/></h2>
  </b:if>
  <div class='widget-content'>
  <div id='labelCloud'/>
<script type='text/javascript'>

// Don't change anything past this point -----------------
// Cloud function s() ripped from del.icio.us
function s(a,b,i,x){
      if(a&gt;b){
         var m=(a-b)/Math.log(x),v=a-Math.floor(Math.log(i)*m)
            }
      else{
         var m=(b-a)/Math.log(x),v=Math.floor(Math.log(i)*m+a)
         }
      return v
   }

var c=[];
var labelCount = new Array();
var ts = new Object;
<b:loop values='data:labels' var='label'>
var theName = &quot;<data:label.name/>&quot;;
ts[theName] = <data:label.count/>;
</b:loop>

for (t in ts){
     if (!labelCount[ts[t]]){
          labelCount[ts[t]] = new Array(ts[t])

          }
        }
var ta=cloudMin-1;
tz = labelCount.length - cloudMin;
lc2 = document.getElementById('labelCloud');
ul = document.createElement('ul');
ul.className = 'label-cloud';
for(var t in ts){
    if(ts[t] &lt; cloudMin){
       continue;
       }
    for (var i=0;3 &gt; i;i++) {
            c[i]=s(minColor[i],maxColor[i],ts[t]-ta,tz)
             }
              var fs = s(minFontSize,maxFontSize,ts[t]-ta,tz);
        li = document.createElement('li');
        li.style.fontSize = fs+'px';
        li.style.lineHeight = '1';
        a = document.createElement('a');
        a.title = ts[t]+' Posts in '+t;
        a.style.color = 'rgb('+c[0]+','+c[1]+','+c[2]+')';
        a.href = '/search/label/'+encodeURIComponent(t);
        if (lcShowCount){
            span = document.createElement('span');
            span.innerHTML = '('+ts[t]+') ';
            span.className = 'label-count';
            a.appendChild(document.createTextNode(t));
            li.appendChild(a);
            li.appendChild(span);
            }
         else {
            a.appendChild(document.createTextNode(t));
            li.appendChild(a);
            }
        ul.appendChild(li);
        abnk = document.createTextNode(' ');
        ul.appendChild(abnk);
    }
  lc2.appendChild(ul);  
</script>

<noscript>
    <ul>
    <b:loop values='data:labels' var='label'>
      <li>
       <b:if cond='data:blog.url == data:label.url'>

         <data:label.name/>
       <b:else/>
         <a expr:href='data:label.url'><data:label.name/></a>
       </b:if>
       (<data:label.count/>)
      </li>
    </b:loop>
    </ul>
</noscript>
    <b:include name='quickedit'/>
  </div>

</b:includable>
</b:widget>

以上で必要なコードは追加できました。

次に必要に応じてコードの中で使われている変数を編集し、色やラベルクラウドの文字サイズなどブログデザインに合わせます。


表示するラベルの数

var cloudMin= 1;

この変数でラベルクラウドに表示するラベルの数を決めます。初期値の1は「全ラベル表示」。ここで上限の数値を指定すれば表示数を制限することができます。


表示色と文字サイズ

var maxFontSize = 20;
var maxColor = [0,0,255];
var minFontSize = 10;
var minColor = [0,0,0];
var lcShowCount = false;

maxFontSizeとminFontSizeで文字サイズを決めます。ちなみにこのブログではMaxFontSizeが20、minFontSizeは12です。

色はRGBで指定します。ブログやサイトデザインでは16進数(FFFFFFなど)が使用されることが多いのでRGB(10進数)はPhotoShopなどのデザインツールを使うか、もしくは「RGB変換」などのサイトで変換します。


記事数の表記

lcShowCount

通常のラベルではラベルの右側に括弧表記で投稿記事数が表示されます。ラベルクラウドでは初期値で記事数は非表示(false)になっています。ラベルを表示したいときには、この値を True に変更します。


フォントと配置

#labelCloud {text-align:center;font-family:arial,sans-serif;}

ラベルクラウドで使用するフォントや配置を決めます。sans-serifが指定されているのでBlogger全体で使用するフォントに特別なものを指定していない限り、変更しなくても本文と同じフォントが選択されるはずです。配置は初期値で「中央揃え」ですが、下記の選択肢からブログデザインに合わせるようにします。

text-align:justify;
text-align:right;
text-align:left;


特に変更しなくても稼動するので変更するのはブログデザインに合わせたいフォントの色と文字サイズくらいでしょうか。もしもっとカスタマイズしたいという場合は、あと若干のカスタマイズ項目がありますので原文を参照してください。

Related Posts Plugin for WordPress, Blogger...
にほんブログ村 ブログブログ ブログノウハウへ
0 Comments:

売れるアフィリエイターはこうやって記事を書いていた

現代広告の心理技術101
こんな裏技、ズルすぎる!!

この本、買って読みました。
ブログやサイトアフィリエイトの記事って、実はこういったセオリーに基づいて書かれていたんですね。

同じ時間を掛けて書いた記事。
読者を巧みに購買者へ豹変させるための心理作戦。
知っているのと知らないのでは大違い。

リンクはクリックされるのに何故か成約しない理由、
少ないクリックでも何故か売れる理由。

売上レポートを見るのが楽しくなる、アフィリエイター必携のマニュアル書です。
» 『現代広告の心理技術101』