ブログって順繰りに見てく分にはいいんだけど、
どんなコンテンツがあるのかパット見わからないのが、
前々から気になってた。
ラベルとかタグとかはあるんだけど、カテゴリがでかすぎて探すのがだるい。
ということで、ラベルでサブカテゴリを使えるようにカスタマイズする。
仕様
- ラベルを階層を「 | 」(半角|)の区切りで登録すると、階層化されて表示されるようにする。例)aaa|bbb|ccc
- 階層で同じ名前は使わない。aaa,bbb|aaaみたいのはだめ。(表示がおかしくなる)
下のラベルの欄を見るとわかるけど、サブカテゴリもラベルとして追加してる。
aaa,aaa|bbb,aaa|bbb|cccという感じ。
使い方
jQueryを使ってるので、bloggerでjQueryを使えるようにするを参考に、インクルードしとく。
下のコードよりも先に読み込まれるように差し込むこと。
Bloggerのカスタマイズ→ガジェットの追加→HTML/Javascript
に↓のコードを貼り付ける。
<style type="text/css"><!--
.list-label-widget-content ul {
margin-bottom:0;
}
.list-label-widget-content ul li{
cursor:pointer;
}
--></style>
<script type="text/javascript"><!--
jQuery.noConflict()(function($){
var classname = {};
var labelcount = 0;
$(".list-label-widget-content li").each(function(){
var labels = $(this).find(":first").text().split("|");
var parentul = $(".list-label-widget-content > ul");
for (var i = 0;i < labels.length;i++){
if (classname[labels[i]] == null){
classname[labels[i]] = "list_group_"+labelcount;
labelcount++;
}
if ( i < labels.length-1){
if ($("."+classname[labels[i]]).length == 0){
parentul.append("<li class='"+classname[labels[i]]+"'></li>")
.find("li:last")
.append("<a>"+labels[i]+"</a>")
.append('<ul></ul>');
}else if($("."+classname[labels[i]]+">ul").length == 0 ){
$("."+classname[labels[i]]).append('<ul></ul>');
}
parentul = $("."+classname[labels[i]]+" > ul");
}else{
if ($("."+classname[labels[i]]).length == 0){
parentul.append($(this).clone())
.find("li:last")
.addClass(classname[labels[i]])
.find(":contains("+labels[i]+")")
.text(labels[i]);
}else{
$("."+classname[labels[i]]+">a")
.text(labels[i])
.attr("href",$(this).find(">a").attr("href"))
.after($(this).find(">span").clone());
}
$(this).remove();
}
}
})
$(".list-label-widget-content li").click(function(){
$(this).children("ul").toggle();
return false;
});
$(".list-label-widget-content a").click(function(){
if ($(this).attr("href") != undefined) document.location = $(this).attr("href");
});
})
--></script>
以上。
一応クリックイベントを仕込んで、開く閉じるもできるようにしてるけど、
開いてるとき、閉じてるときの押す場所のイメージの変更とかは、テンプレートにも絡んでくるんで、
手をつけなかった。
liにイベント仕込んでるのが我ながらアレだよなぁ…。
まあ、とりあえずはこんなもんか。
2010/06/06追記
「|」だとフィードが取れないので「/」に変更。
0 件のコメント:
コメントを投稿