Blogger V3.0:添加标签云

相信这是很多人期待的功能吧。以前用Delicious为Blogger添加标签云,现在我们的方法更简单。
请于修改之前备份你的模板。
Step1:我们知道,Blogger beta的代码分为三部分:样式表、布局、Widget。第一步我们不需要展开代码,添加CSS代码。找到 ]]></b:skin> ,并将CSS添加在其之前。

/* 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}

Step2:添加布局部分代码。我们仍然要先找到 ]]></b:skin> ,但这一次我们要在它之后、Head之前添加以下代码:
<script type='text/javascript'>
// Label Cloud User Variables
var lcBlogURL = 'http://YOURBLOG.blogspot.com';
var maxFontSize = 20;
var maxColor = [0,0,255];
var minFontSize = 10;
var minColor = [0,0,0];
var lcShowCount = false;
</script>

修改YOURBLOG为你的名字,其中关于颜色,文字大小等值可以自定义,以跟你的Blog色调打配。
简单介绍一下,maxFontsize表示字体最大值,minFontSize表示字体最小值,minColor表示颜色最浅值,maxColor表示颜色最深值。

Step3:最后要修改的是Widget本身了。继续往下看就会找到Label的Widget
类似这一句:<b:widget id='Label1' locked='false' title='Labels' type='Label'/>
如果你没有展开代码,只需要用以下代码替换这一行;相反,你要替换整个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 -----------------

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 ta=0

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


}


}

tz = labelCount.length-1;

lc2 = document.getElementById('labelCloud');

ul = document.createElement('ul');

ul.className = 'label-cloud';

for(var t in ts){


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 = lcBlogURL+'/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>

Step4:Game Over ^-^

31 条评论:

抽筋儿 说...

请问为什么我的标签云的每个标签边上没有post的数量啊?

咖啡鱼 说...

var lcShowCount = false;
这一句把Flase改为True

抽筋儿 说...

谢谢啦!

Ding Ding 说...

页面外观中的变量声明无效:这不是已识别的字体大小值。 输入: 90%

匿名 说...

怎么我改了模板之后总是报错:页面外观中的变量声明无效:这不是已识别的字体大小值。 输入: 90%?

咖啡鱼 说...

在CSS之前的那一部分是变量声明部分。标签云中没有声明过变量。我自己测试了一次,这篇Blog没有问题,是你自己操作错误,请确保你每一步都做对了。

ejedi 说...

谢谢,改好了

不过每当拉滚动条到那个位置的时候总卡一下,不过不影响,你的也是,没改以前还没有,这是杂地了

BRYAN 说...

你好,非常谢谢你的提点。但还是出现一点问题。我已经按照提示,也把var lcShowCount = false;
这一句把Flase改为True了,不过还是没有出现post的数量啊?请指教

咖啡鱼 说...

我的设置

var lcBlogURL = 'http://sunr.blogspot.com';
var maxFontSize = 30;
var maxColor = [0,220,0];
var minFontSize = 6;
var minColor = [0,40,0];
var lcShowCount = true;

xi 说...

拜托拜托,因为我是菜鸟,但是我相当需要帮助:我按照你的方法弄了,最后我的标签只出现了“lable cloud”,别的啥都没有了,而且还没有链接,我晕!!!

xi 说...

一切已OK,还是谢谢你:)!

loolee 说...

你好,非常好的hack,博主的文章对Blogger用户很有帮助,谢谢!

想问下标签云的排序如何修改代码才能按标签名排而不是按标签的数量由多到少排?

咖啡鱼 说...

不能那样排列,标签云本身的设计目的就是按数量排列的

虚飞 说...

如果我之想让标签横着排,改如何解决?

Yimeng Zhang 说...

似乎这个hack对含有特殊字符(需要转换的那种,)label有bug,比如123·213123(那个·号会变成{之类的东西)
请问能否解决?

Yimeng Zhang 说...

似乎这个hack对含有特殊字符(需要转换的那种,)label有bug,比如123·213123(那个·号会变成{之类的东西)
请问能否解决?

NZZ 说...

呵呵!你也是山东人,呵呵!老乡好啊!我想问一下关于这个标签云怎么才能修改标签的 颜色,跪求老乡指导!谢谢

咖啡鱼 说...

已经在文章中提到了

sliver 说...

不知道xizi是怎么解决的,我照你说的添加代码后,也是只能看到lable cloud,没有标签。。。

sliver 说...

虽然我的还没成功,不过刚刚看到一篇文章,看到loolee问的按标签名排列应该是可以解决的,直接在页面元素里面把label设置改为按字母顺序排列就可以了,不知道对不对

sliver 说...

我的终于搞定了,刚刚才在国外一高手那看到,lable cloud的正常显示,需要至少有一个标签包含两篇以上的文章,我的之前还不符合条件,郁闷…

Unknown 说...

幸不辱命,终于把标签云加进去了~谢谢了!可惜封神榜太牛了~

匿名 说...

依照指示成功做到了。很喜歡!謝謝您!

Jo Chou 说...

十分感謝樓主分享!

Luke Fly 说...

十分感谢啊!我的一切正常!

炒面两碗 说...

太感谢了,我也有标签云了呢

leafjj 说...

谢谢,哈哈

Unknown 说...

还不是很懂啊啊!

Sunny 说...

Hai!咖啡鱼!Thank you very much for providing this helpful method! now i also have beautiful label clouds : ) May God Bless You : ) May i know how to make the label clouds look less crowded ? hope to hear from you soon : )

匿名 说...

谢谢,改好了

匿名 说...

谢谢,改好了