<< コメント&トラバを日本語表記 | TOP | 月別アーカイブのプルダウン化 >>

サブカテゴリ風表示(ツリー化)
カテゴリカテゴリ表示をサブカテゴリ有りっぽくする。
一番いじりたかったのはなんと言ってもコレです。

またまたstroll::blogさんのお世話に。
カテゴリーリストでサブカテゴリーがあるっぽく表示する」を拝借しました。
ホント、職人さんの腕には脱帽です。

以下、もしものリンク先消滅の保険のため、スクリプト保存。
(1)「カテゴリの編集」でカテゴリを「カテゴリ(サブカテゴリ)」に設定する。
  ※カッコは半角の「(」と「)」で。

(2)カテゴリリストタグ{category_list}を修正
<div id="categorylist">{category_list}</div>
(3)</body>の直前にスクリプト挿入。
<script type="text/javascript" language="javascript">
<!--
//カテゴリーリストでサブカテゴリーがあるっぽく表示する
//ツリー化スクリプト ver 2 edit by stroll
function makeTreeElements (idName,objList) {
if (!objList.innerHTML) return;
var objLink = objList.getElementsByTagName('a')[0];
var linkUrl = objLink.getAttribute('href');
if (idName.indexOf('comment') > -1 || idName.indexOf('tb') > -1) {
var tmpText = objList.innerHTML.split("⇒");
tmpText[0] = tmpText[0].slice(0,tmpText[0].search(/<BR/i));
this.base = Array('<a href="',linkUrl,'">',tmpText[0],'</a>').join('');
this.elem = objLink.innerHTML;
} else if (idName.indexOf('entry') > -1) {
var tmpText = objList.innerHTML;
tmpText.match(/¥((¥d¥d¥/¥d¥d)¥)/);
this.base = Array('<strong>[',RegExp.$1,']</strong>').join('');
this.elem = Array('<a href="',linkUrl,'">',objLink.innerHTML,'</a>').join('');
} else if (idName.indexOf('link') > -1) {
var tmpText = objList.innerHTML;
if ( tmpText.match(/¥[(.+)¥](.+)/) ) {
this.base = Array('<strong>[',RegExp.$1,']</strong>').join('');
this.elem = Array('<a href="',linkUrl,'" target="_blank">',RegExp.$2,'</a>').join('');
}
} else if (idName.indexOf('category') > -1) {
var tmpText = objList.innerHTML;
if ( tmpText.match(/>(.+)¥((.+)¥).+(¥s¥(.+¥))/) ) {
this.base = Array(RegExp.$1).join('');
this.elem = Array('<a href="',linkUrl,'"> ',RegExp.$2, '</a>', RegExp.$3).join('');
} else {
this.base = Array('<a href="',linkUrl,'">',tmpText,'</a>').join('');
this.elem = 'null';
}
}
return this;
}
function createTreeList(idName,option) {
var objFocus = this.document.getElementById(idName);
if (!objFocus) return;
if (!objFocus.innerHTML) return;
var objLists = objFocus.getElementsByTagName('li');
var linkList = new Array();
var outText = new Array();
var linkListNum = new Array();
var count = 0;
var tempDispNum = '';
if (objLists.length > 0) {
for (i=0;i<objLists.length;i++) {
var chckFlag = true;
var elemText = new makeTreeElements(idName,objLists[i]);
if (!elemText.base || !elemText.elem) return;
for (j=0;j<linkList.length;j++) {
if (linkList[j].base.indexOf(elemText.base) > -1) {
chckFlag = false;
linkList[j][linkList[j].length] = elemText.elem;
}
}
if (chckFlag) {
var tmpNum = linkList.length;
linkList[tmpNum] = new Array();
linkList[tmpNum][0] = elemText.elem;
linkList[tmpNum].base = elemText.base;
}
}

if (idName == 'categorylist' && linkList.length > 0) {
for (i=0;i<linkList.length;i++) {
linkListNum[i] = 0;
for (j=0;j<linkList[i].length;j++) {
if (linkList[i][j] != 'null' && linkList[i][j].match(/¥s¥((.+)¥)/)) {
linkListNum[i] = linkListNum[i] + parseInt(RegExp.$1);
}
}
}
}

if (linkList.length > 0) {
outText[outText.length] = '<ul>¥n';
for (i=0;i<linkList.length;i++) {
tempDispNum = '';
if (idName == 'categorylist' && linkListNum[i] > 0) {
tempDispNum = ' ('+linkListNum[i]+')';
}
outText[outText.length] = Array('<li>',linkList[i].base,tempDispNum,option.top).join('');
if (linkList[i].length > 0 && option.sort) linkList[i].reverse();
for (j=0;j<linkList[i].length;j++) {
if (linkList[i][j] != 'null') {
outText[outText.length] = (j == linkList[i].length - 1) ? option.end : option.list;
outText[outText.length] = Array(linkList[i][j],option.leef).join('');
}
}
outText[outText.length] = Array(option.btm,'</li>').join('');
}
outText[outText.length] = '</ul>¥n';
objFocus.innerHTML = outText.join('');
}
}
}
var gTreeOption = new Array;
gTreeOption['sort'] = false; /* ツリー内の表示順 true:並び替える false:そのまま */
gTreeOption['list'] = ' ├ '; /* ツリー用マーク(通常) */
gTreeOption['end'] = '└ '; /* ツリー用マーク(末端) */
gTreeOption['leef'] = '<br />¥n'; /* 各枝の末尾 */
gTreeOption['top'] = '<br />¥n'; /* ツリー本体の最初 */
gTreeOption['btm'] = ''; /* ツリー本体の最後 */
gTreeOption['num'] = 0; /* ()の中身の数の合計数(値を変更しないでください) */

createTreeList('newentrylist',gTreeOption); // 最新エントリリストのツリー化
createTreeList('entrylist',gTreeOption); // エントリリストのツリー化
createTreeList('commentlist',gTreeOption); // 最新コメントリストのツリー化
createTreeList('tblist',gTreeOption); // 最新トラックバックリストのツリー化
createTreeList('linklist',gTreeOption); // リンクリストのツリー化
createTreeList('categorylist',gTreeOption); // カテゴリリストのツリー化
// -->
</script>

[おまけ]
(4)このスクリプトで、他メニューのツリー化もカバーしてるので、ついでに。
  ・コメントリストタグ{recent_comment_list}
  ・トラックバックリストタグ{recent_trackback_list}
  ・エントリーリストタグ{selected_entry_list}
  ・最新エントリーリストタグ{latest_entry_list}
  ・リンクリストタグタグ{link_list}を修正。
<div id="commentlist">{recent_comment_list}</div>
<div id="tblist">{recent_trackback_list}</div>
<div id="entrylist">{selected_entry_list}</div>
<div id="newentrylist">{latest_entry_list}</div>
<div id="linklist">{link_list}</div>
:: 雑記(カスタマイズ) | comments(0) | trackbacks(0) | posted by 二瀬古 
コメント




※文中にメルアドやURLがあると弾かれます。管理人への連絡は、こちらに記載のメルアド宛にお願いします。
トラックバック URL
http://blog.nisekobox.com/trackback/109