2009年4月7日火曜日

サイドバーに2種類のパーツを追加(2):タグクラウド

サイドバーに2つのウィジェットを追加してみました。の2回目
タグクラウドの設置です。

Bloggerのウィジェットの中には、ラベル一覧はあっても、タグクラウドはありません。
なので、直接テンプレートの中にコードを埋め込む必要があります。
テンプレートを直接操作するので、CSS、HTMLの知識が必要になってきます。
ホームページをはじめて作るなどの初心者の人だとちょっと難しいステップになるかもしれません。

タグクラウドとは?


Wikipediaによると、
タグ・クラウド (tag cloud) はウェブサイト上で使用されるタグの視覚的記述を指す。
直訳すると「タグの雲」を意味し、雲のように表示されるタグ文字列が大小さまざまに浮かんでいるように見えることからこの名前が付けられた。概してタグはアルファベット順にリスト化され、タグの頻出度はフォント・サイズや色によって表示される。したがって、アルファベットと人気度数の両方でタグを見つけることが可能となる。

とのこと。
キーワードの重要性・投稿数などを重み付けして、テキストの大小で需要度を示す表現です。

↑このページではこのようなタグクラウドを表現しています。
このページがどのようなタグ(記事)が多いのかが視覚的によくわかる機能です。

Bloggerでタグクラウドを表示する方法


Blogger独自のタグクラウドのウィジェットがないので、テンプレートに直接タグを埋め込みます。
設定方法は以下のステップで。

※注意事項※
テンプレートは必ずバックアップを取って置いてください。
  1. Bloggerにログインして、レイアウト>HTMLの編集 タブをクリック
  2. 「テンプレートを編集」の項目の中のコード(HTML、CSS、JavaScriptなどが入っているテンプレート)をメモ帳などにコピー&ペースト。このとき、「ウィジェットのテンプレートを展開」のチェックボックスにチェックを入れておく
  3. ]]></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}

  4. 次に、3.と同様に]]></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>

  5. 次に、Bloggerのデフォルトのラベルをウィジェットを表示している場合、そのウィジェットを以下のコードに変更する。
    ※デフォルトのウィジェットは下のようなコードからはじまっています。
    <b:widget id="'Label1'" locked="'false'" title="'Labels'" type="'Label'/">
    このコードを以下のコードと置き換えます。
    <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>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 = "<data:label.name/>";
    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] < cloudMin){
    continue;
    }
    for (var i=0;3 > 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>

  6. タグの埋め込みが終わったら、「テンプレートを編集」画面にコードをコピー&ペーストして、「プレビュー」してみましょう。
  7. ここでうまくタグクラウドがサイドバーに表示されていれば、成功です!おめでとうございます!

もしうまくできなかったら…


もう一度、上のステップを再度試してみてください。コードには手を入れずに、そのままコピー&ペーストをしてください。コードが変更されているとうまくうごきません。

また、私が引っかかった点は、デフォルトのラベルウィジェットを追加していなかったため、 このコードがみつかりませんでした。
わかりやすくするためには、一度Blogger上のラベルウィジェットを追加した上で、再度ステップを試してみてください。

参考にさせてもらったサイト


今回の設定で参考にさせてもらったサイトは以下です。ありがとうございました!



0 件のコメント: