NP_CommentTree|昇順で表示
NP_CommentTree|昇順で表示
- Author : pushman|Nucleus|2006-04-22 Sat 02:29
-
多くの Blog には「最近のコメント・トラックバック」という項目がありますが、当サイトでは長らくこの項目を作りませんでした。あまりコメントもトラックバックも無い、というのがその理由だったわけですが、最近立て続けにコメントしていただいたことに気を良くし、勢いに任せてトップページのみ「NP_CommentTree」を利用して表示する事にしました。
NP_CommentTree デフォルトの表示順は降順*1に設定されていますが、当サイトは個別アイテムページと同じように、昇順*2に設定。フォーラムに方法が記載されているのでらくちんだ、と思ったのですがコメントとトラックバック混在表示時に、最新のコメント、もしくはトラックバックが表示されなくなったりしたので修正メモ。
まずはフォーラムに書かれている修正を加えます。「//sort comment and trackbacks of this item」というコメント直後の「krsort($ress);」を「ksort($ress);」に変更します。こんな感じですね。
//sort comment and trackbacks of this item // pushman //krsort($ress); ksort($ress);用心の為に元のコードは消さずにコメントアウトしています。次に以下の if 文をコメントアウトします。
// pushman //if(count($ress) > $show_rescnt){ // $s_items = str_replace('%kind%', 'more', $this->getOption(s_items)); // echo $s_items. "and more..." .$this->getOption(e_items)."\n"; //}以上でとりあえず出力順は古いものからになります。コメントアウトした if 文は、表示数以上のコメントやトラックバックがある場合に「まだまだありますよー」という表示をする部分ですね。では実際にコメントを表示する部分はどこかと調べていたところ、先ほどの if 文のすぐ上に次のような for 文を発見。
for ($j=0;$j<$show_rescnt;$j++){ echo $ress[$j]."\n"; }「$ress」という配列をキー「0」から順番に取り出して出力しているようです。先程修正した「ksort($ress);」という部分で、コメントとトラックバックを古い順番に並べ直しているので、キーが「0」からだと一番古いものを必ず表示してしまうために今回の問題が起きているような気がします。つまり、総コメント(トラックバック含む)数が指定表示数以下の場合は問題ないですが、指定表示数を超えてしまうと一番最初に表示するものはキーが「0」ではなく「現在持っているコメントとトラックバックを足した数から指定表示数を引いた数」になってほしいわけです。なんか書いてて意味がわからなくなってきたので修正点のみ書きます(笑)。前述の for 文の直前に if 文を追加して次のようにします。
if (count($ress) <= intval($commentcnt)) { for ($j=0;$j<$show_rescnt;$j++){ echo $ress[$j]."\n"; } } else { $pj = count($ress) - intval($commentcnt); $show_rescnt = $show_rescnt + $pj; for ($j=$pj;$j<$show_rescnt;$j++){ echo $ress[$j]."\n"; } }コメントとトラックバックの合計「$ress」と、指定表示数「$commentcnt」を比較し、$ress の方が小さければfor文の開始条件「$j」を「0」にして、そうでなければ「$pj」に「$ress - $commentcnt」を代入します。そして、for文の開始条件を「$j=0」から「$j=$pj」に変更し、終了条件の判定に使う「$show_rescnt」に「$pj」を足します。
ほんと修正しながらかなり混乱したのですが、今のところはこれで「最新X件のみを古い順から表示」に成功しています。ただ、悲しいことに当サイトはあまりコメントもトラックバックも多くないので、数が増えてくるとそれはそれでおかしな点が出てくるかもしれません。おかしくなるぐらいコメントをもらえるようになれば嬉しいですね。
-
-
Tag(s): NP_CommentTree

