2009年4月27日星期一

给 blogger 同时加上标签云和分类列表

说穿了其实就是把一部分标签用特殊的符号作为前缀(我用一个加号 + ,为了好看起见我在分类标签的屁股上也加了一个,没实际作用),把这些标签从标签云中剔出来单独放在一列里显示。

查找字符串"]]></b:skin>",

在它之前加入


/* Label Cloud Styles
----------------------------------------------- */
#labelCloud {font-family:arial,sans-serif;}
#labelCloud .label-cloud li{text-align:center;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}
#labelCloud .category-list li{text-align:left;padding:0 50px;}


在 "]]></b:skin>" 之后、"</head>"之前加入

<script type='text/javascript'>
// Label Cloud User Variables
var cloudMin = 1;
var maxFontSize = 20;
var maxColor = [255,0,255];
var minFontSize = 12;
var minColor = [64,128,128];
var lcShowCount = true;
var caPrefix = &quot;+&quot;;
var caColor = &quot;#336688&quot;;
</script>

其中 caPrefix 是作为分类的标签的前缀。前缀可以是火星文字符串,应该不会乱码。按照需要改掉就可以了。

把"扩展窗口小部件模板"前面的钩去掉,将自带标签列表的代码

<b:widget id='Label1' locked='false' title='标签云' type='Label'/>

换成下面的内容:

<b:widget id='Label1' locked='false' title='标签云' 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&#39;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 tss = new Object;
var ts = new Object;
var cL = new Object;
var na = new Object;

<b:loop values='data:labels' var='label'>
var theName = &quot;<data:label.url/>&quot;;
tss[theName] = <data:label.count/>;
</b:loop>


for (t in tss){
na[t] = decodeURIComponent(t.split(&#39;/&#39;).pop());
if (na[t].indexOf(caPrefix) == 0){
cL[t] = tss[t];
}
else{
ts[t] = tss[t];
}
if (!labelCount[ts[t]]){
labelCount[ts[t]] = new Array(ts[t])
}
}

tz = labelCount.length-1;
lc2 = document.getElementById(&#39;labelCloud&#39;);
ul = document.createElement(&#39;ul&#39;);
ul.className = &#39;label-cloud&#39;;
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(&#39;li&#39;);
li.style.fontSize = fs+&#39;px&#39;;
li.style.lineHeight = &#39;1&#39;;
a = document.createElement(&#39;a&#39;);
a.title = na[t]+&#39; 共有 &#39;+ts[t]+&#39; 篇日志&#39;;
a.style.color = &#39;rgb(&#39;+c[0]+&#39;,&#39;+c[1]+&#39;,&#39;+c[2]+&#39;)&#39;;
a.href = t;
if (lcShowCount){
span = document.createElement(&#39;span&#39;);
span.innerHTML = &#39;(&#39;+ts[t]+&#39;) &#39;;
span.className = &#39;label-count&#39;;
a.appendChild(document.createTextNode(na[t]));
li.appendChild(a);
li.appendChild(span);
}
else {
a.appendChild(document.createTextNode(na[t]));
li.appendChild(a);
}
ul.appendChild(li);
abnk = document.createTextNode(&#39; &#39;);
ul.appendChild(abnk);
}
lc2.appendChild(ul);


h2 = document.createElement(&#39;h2&#39;);
h2.appendChild(document.createTextNode(&quot;分类&quot;));
lc2.appendChild(h2);

ul = document.createElement(&#39;ul&#39;);
ul.className = &#39;category-list&#39;;
for(var t in cL){
li = document.createElement(&#39;li&#39;);
a = document.createElement(&#39;a&#39;);
a.title = na[t]+&#39; 共有 &#39;+cL[t]+&#39; 篇日志&#39;;
a.href = t;
if (lcShowCount){
span = document.createElement(&#39;span&#39;);
span.innerHTML = &#39;(&#39;+cL[t]+&#39;) &#39;;
span.className = &#39;label-count&#39;;
a.appendChild(document.createTextNode(na[t]));
a.style.color = caColor;
li.appendChild(a);
li.appendChild(span);
}
else {
a.appendChild(document.createTextNode(na[t]));
li.appendChild(a);
}
ul.appendChild(li);
abnk = document.createTextNode(&#39; &#39;);
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>

就这么多了……
太丑了。捂脸。 JS 我基本没学过,更别说用它来控制网页内容了。
不过既然有人问还是发上来吧。希望对需要的朋友有所帮助。


--

没有评论:

发表评论