記事一覧

WebDiaryProのコメント等をツリー化する

前もって宣言していたとおり、JUGEMカスタマイズ講座さんの
ツリー化スクリプトver2」をWDPに導入するための解説です。
これを導入すると、⇒のナビゲーションのようにコメントやエントリーが
日付ごとや記事ごとにまとめられます。

ちょっとした前置きがあります。
ご了承のうえでスクリプトの追記を行ってください。

●JUGEMと同じ記述式にするため、「年」「時間・分」を
 ナビゲーションからばっさり切り捨てます。
 それが嫌だという方までは独自フォローできません。
●ナビゲーションに「new!」の表記がでるようにしている場合、
 それもばっさり切り捨てます……。
 保持する良い方法が見つかりませんでした。すいません。
●<dl><dt>を<ul><li>に書き換えます。
 CSSでリストマークを変えたり画像を使うデザインにしている場合、
 デザインが変わってしまいますので各自調節をお願いします。
●ツリー化を行うのは「最新エントリー」「最新コメント」
 「最新トラックバック」の3つです。リンクやカテゴリは
 元々WDPはツリーになっているので必要ありません。

それでは解説です。自分流ですので他にもやり方はあるかもしれません。

■ツリー化スクリプトver2を導入する■

1.「最新エントリー」部分(<!--SKIN_LIST_HEAD_START-->~<!--SKIN_LIST_FOOT_END-->)を以下のように書き換える

<!--SKIN_LIST_HEAD_START-->
<h2>最新エントリー</h2>
<div class="block" id="newentrylist">
<ul>
<!--SKIN_LIST_HEAD_END-->

<!--SKIN_LIST_START-->
<li><a href="${ARTICLE_URL}">${ARTICLE_SUBJ}</a> (${ARTICLE_MONTH}/${ARTICLE_DAY})</li>
<!--SKIN_LIST_END-->

<!--SKIN_LIST_FOOT_START-->
</ul>
</div>
<!--SKIN_LIST_FOOT_END-->

  

2.「最新コメント」部分(<!--SKIN_CMTLIST_HEAD_START-->~<!--SKIN_CMTLIST_FOOT_END-->)を以下のように書き換える

<!--SKIN_CMTLIST_HEAD_START-->
<h2>最新コメント</h2>
<div class="block" id="commentlist">
<ul>
<!--SKIN_CMTLIST_HEAD_END-->

<!--SKIN_CMTLIST_START-->
<li>${ARTICLE_SUBJ}<br />
<a href="${INFO_PATH}?mode=comment&amp;no=${ARTICLE_PNO}#comment">${ARTICLE_NAME} (${ARTICLE_MONTH}/${ARTICLE_DAY})</a></li>
<!--SKIN_CMTLIST_END-->

<!--SKIN_CMTLIST_FOOT_START-->
</ul>
</div>
<!--SKIN_CMTLIST_FOOT_END-->

3.「最新トラックバック」部分(<!--SKIN_TBLIST_HEAD_START-->~<!--SKIN_TBLIST_FOOT_END-->)を以下のように書き換える

<!--SKIN_TBLIST_HEAD_START-->
<h2>最新トラックバック</h2>
<div class="block" id="tblist">
<ul>
<!--SKIN_TBLIST_HEAD_END-->

<!--SKIN_TBLIST_START-->
<li>${TRACKBACK_TITLE}<br />
<a href="${INFO_PATH}?mode=trackback&amp;no=${TRACKBACK_PNO}#trackback">${TRACKBACK_BLOG} (${TRACKBACK_MONTH}/${TRACKBACK_DAY})</a></li>
<!--SKIN_TBLIST_END-->

<!--SKIN_TBLIST_FOOT_START-->
</ul>
</div>
<!--SKIN_TBLIST_FOOT_END-->

※改造のポイント
 ・<div id="○○"> <ul><li>~</li><ul> </div>のように、idをふったdivで
  リストタグを囲む。
 ・リスト内容のリンクタグ<a>~</a>の範囲を変えないこと。
 ・時間表記は日付のみにすること。
 ・スキンによっては違いがあるかもしれませんが、
  上の3つを最低限守っていればスクリプトが働くようです。
 ・<h2>~<h2>の間は自由に書き換えてもOK。

4.「skin>footer.html」の</body>直前にツリー化スクリプトを記入する。
  これはJUGEMカスタマイズ講座さんにあるそのままでOK。

※2008/12/26 追記
 JUGEMカスタマイズ講座さんが行方不明のため、暫定的にスクリプトを
 こちらにも記述しておきます。著作元はJUGEMカスタマイズ講座さんに
 あり、ご指摘等があった場合削除いたします。

<script type="text/javascript">
<!--
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('');
}
}
return this;
}
function createTreeList(idName,option) { // version 2.2
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();
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 (linkList.length > 0) {
outText[outText.length] = '<ul>\n';
for (i=0;i<linkList.length;i++) {
outText[outText.length] = Array('<li>',linkList[i].base,option.top).join('');
if (linkList[i].length > 0 && option.sort) linkList[i].reverse();
for (j=0;j<linkList[i].length;j++) {
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'] = ''; /* ツリー本体の最後 */
createTreeList('newentrylist',gTreeOption); // 最新エントリリストのツリー化
createTreeList('entrylist',gTreeOption); // エントリリストのツリー化
createTreeList('commentlist',gTreeOption); // 最新コメントリストのツリー化
createTreeList('tblist',gTreeOption); // 最新トラックバックリストのツリー化
createTreeList('linklist',gTreeOption); // リンクリストのツリー化
// -->
</script>

  最後の部分だけ書き換えます。

createTreeList('newentrylist',gTreeOption); // 最新エントリリストのツリー化
createTreeList('commentlist',gTreeOption); // 最新コメントリストのツリー化
createTreeList('tblist',gTreeOption); // 最新トラックバックリストのツリー化

…といっても必要のない「リンク」と「エントリー」を削るだけなのですが。

改造や設定などは元の記事そのままでできます。
ツリー化カスタマイズ応用編」もあわせて使用できますので、もしよろしければお試しくださいませ。

TRACKBACK

やった・・・!カテゴリツリー化に成功! from Parody
JUGEMテーマ:JUGEM前々からやろうとして失敗していた、カテゴリのツリー化・・・本日ようやく!ようやく!!出来ました!!そもそも、何故こんなに苦労したか(「こんなに」っていっても伝わりにくいかもしれませんが...
2009/03/06(金)16時38分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2014/11/19(水)18時24分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/01/21(水)16時37分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/01/21(水)22時11分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/01/21(水)22時11分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/01/22(木)04時30分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/01/22(木)06時30分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/01/22(木)17時20分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/01/22(木)17時20分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/01/23(金)01時15分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/01/23(金)12時49分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/01/25(日)13時34分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/01/25(日)13時34分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/01/26(月)03時52分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/01/27(火)07時46分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/01/28(水)09時51分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/01/28(水)09時51分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/01/31(土)09時08分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/01/31(土)09時08分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/02/01(日)03時34分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/02/01(日)03時34分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/02/01(日)06時54分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/02/01(日)06時54分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/02/01(日)06時55分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/02/10(火)03時45分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/02/10(火)06時56分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/02/10(火)07時57分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/02/11(水)03時36分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/02/11(水)03時36分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/02/11(水)06時01分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/02/11(水)09時34分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/02/11(水)13時30分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/02/13(金)02時41分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/02/13(金)03時16分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/02/13(金)05時46分 受信
未承認 from 未承認
管理者に承認されるまで内容は表示されません。
2015/09/20(日)21時28分 受信

COMMENT

■fana [H] ... 2006/06/24(土) edit・delete

どもー、こんばんわ。
ありがとうございました。
おかげさまで導入成功です♪

■kiriji [H] ... 2006/06/25(日) edit・delete

>fanaさん
こんばんは、こっそり反応をいただいたので
こっそりTBを送らせていただきました(笑)
導入成功なさってなによりです!
自分でも表記が変になり、なんでだろうと首を捻ったすえの
無難な改造方法ができました。
応用も無事できましたようでなによりです!

本当はスクリプトの中にリンク集をツリーにするためと思われる
(WDPにとっては)余分なスクリプトがあったり、
改良の方法がありそうなのですが、怖くて手がだせません。
今更ながらXHTMLのことといい、不勉強なのが悔やまれます。
それでは、導入成功のご報告ありがとうございました!

■mew [H] ... 2006/06/26(月) edit・delete

こんばんは。
ツリー化スクリプト導入出来ました!
TBを頂いて即飛んできて、カスタマイズし出したんですが、
とても分かり易い解説だったのに、自分の勘違いで紆余曲折あって(笑)
けど、なんとか成功しました。

そして、前から導入したかったネタバレボタンも設置出来まして、
コチラにはお世話になりっぱなしです。
ありがとうございました[LOVE LOVE]

話は変わって記事違いの内容ですが、1カラムスキン素敵ですね!
私も作ってみたくって、ポップアップメニューのスクリプト、
暇を見つけては探したりしてるんですが、なかなかこれ!といったものがなくて、
挫折してます[滝汗]
CSSも結構綿密に組まないとダメですしね…。
海外のサイトには、日本のサイトより高機能なスクリプトが
公開されているようなんですが、
英語がダメな自分では無理だーorzと、断念しました(笑)

■kiriji [H] ... 2006/06/26(月) edit・delete

>mewさん
導入成功のご報告ありがとうございます!
「JUGEMの表記どおり」というのがツリー化の一番のネックで、
それに気付くまで自分もナビバーが怪しさ爆発な
状態になりました(笑)
ブログをスクリプトで書き換えているものには
リンクの範囲で変換箇所を選んでいるものもあり
<a>~</a>の位置も非常に重要だったようです。
「コメント投稿者の名前でアイコンを変える」も
実はこのへん(<a>タグ)が関わっているようです。
カテゴリごとのアイコン、こちらでも引き続き実験してみますね。

1カラム用スクリプトは、一番イメージに近いのが
Mugiさんのサイトにありまして、今度ひとつ
ド根性で無理やり作ってみようと思っています。
海外サイトさんのはやっぱり何が難しいって
やっぱり言語ですね[汗]
プルダウンやポップアップで検索して出てくるものを
自分も片っ端から試しているところです。
またそれらしいスキン試作品ができましたら置いてみようと思っています。
むしろこれを叩き台に、どなたか作って!と願掛け中です(笑)

■かこ ... 2007/01/08(月) edit・delete

こんばんは、最新版のWDP4.51ではこちらの方法でのコメントのツリー化はできないのでしょうか?

skin>navigation.htmlの
-----------------------------
<!--SKIN_CMTLIST_HEAD_START-->
<div class="block">
<h2>最近のコメント</h2>
<dl>
<!--SKIN_CMTLIST_HEAD_END-->
<!--SKIN_CMTLIST_START-->
<dt><a href="${INFO_PATH}?mode=comment&amp;no=${ARTICLE_PNO}#comment">${ARTICLE_SUBJ}</a><!--ARTICLE_NEW_START--> <em class="new">New!</em><!--ARTICLE_NEW_END--></dt>
<dd>${ARTICLE_NAME}</dd>
<dd>${ARTICLE_YEAR}/${ARTICLE_MONTH}/${ARTICLE_DAY} ${ARTICLE_HOUR}:${ARTICLE_MINUTE}</dd>
<!--SKIN_CMTLIST_END-->
<!--SKIN_CMTLIST_FOOT_START-->
</dl>
</div>
<!--SKIN_CMTLIST_FOOT_END-->
-----------------------------
↓までの記述を
-----------------------------
<!--SKIN_CMTLIST_HEAD_START-->
<div class="block">
<h2>最近のコメント</h2>
<div id="commentlist">
<ul>
<!--SKIN_CMTLIST_HEAD_END-->
<!--SKIN_CMTLIST_START-->
<li>${ARTICLE_SUBJ}<br /><a href="${INFO_PATH}?mode=comment&amp;no=${ARTICLE_PNO}#comment">${ARTICLE_NAME} (${ARTICLE_MONTH}/${ARTICLE_DAY})</a>
</li>
<!--SKIN_CMTLIST_END-->
<!--SKIN_CMTLIST_FOOT_START-->
</ul>
</div>
</div>
<!--SKIN_CMTLIST_FOOT_END-->
---------------------------------

という風に変えたあと、
skin>footer.htmlの</body>直前に

---------------------------------
<script type="text/javascript">
<!--
function makeTreeElements (idName,objList) {
~省略~
createTreeList('tblist',gTreeOption); // 最新トラックバックリストのツリー化
// -->
</script>
---------------------------------
をコピペしたのですが、
同記事に書かれたコメントがまとまらず、一つ一つ分かれたままになってしまいます。
上のやり方で私が間違っている部分ありましたら、どうかご指摘頂けないでしょうか?
お忙しいところ申し訳ないですが、自分では何度やっても上手くいかないのです。本当にすみませんがどうか教えてください。

■kiriji [H] ... 2007/01/10(水) edit・delete

>かこさん
ご来訪ありがとうございます。
この返信を書いている現在、4.47以上にしたことが
ないため、これから最新版に移行し確認を行う予定です。
スキンや変数に大きな改変がないかぎり
ここで紹介しているカスタマイズは問題ないはずなのですが……
common.jsと何かぶつかってしまっているのでしょうか。

原因を究明できましたら、改めてレスか記事で
返信させていただきます。今しばらくお待ち下さいm(_ _)m

※もし他に導入されているカスタマイズ等ありましたら、
そちらも教えていただけますと嬉しいです。

■かこ ... 2007/01/13(土) edit・delete

kirijiさま、レスありがとうございます!
WDP4.51をDLしてすぐにツリー化をしようとしたので
スキンは標準のまま、
他のカスタマイズは何も行っておりません。
最新版の確認お待ちしています。

■未承認 ... 2014/06/23(月) edit・delete

管理者に承認されるまで内容は表示されません。

■未承認 ... 2014/07/08(火) edit・delete

管理者に承認されるまで内容は表示されません。

■未承認 ... 2015/01/29(木) edit・delete

管理者に承認されるまで内容は表示されません。

■未承認 ... 2015/02/01(日) edit・delete

管理者に承認されるまで内容は表示されません。

■未承認 ... 2015/02/21(土) edit・delete

管理者に承認されるまで内容は表示されません。

■未承認 ... 2015/03/06(金) edit・delete

管理者に承認されるまで内容は表示されません。

■未承認 ... 2015/06/19(金) edit・delete

管理者に承認されるまで内容は表示されません。

■未承認 ... 2015/06/20(土) edit・delete

管理者に承認されるまで内容は表示されません。