【dokuwiki】discussionプラグインでページ分けする方法

製作 プログラム

最終更新日:2025/12/27

ラムネグから一言:寝る前に読むとくだらなすぎて逆に寝れると好評なすごい適当なブログをこっちではじめてます.

dokuwikiのdiscussionプラグイン、コメント機能を導入出来て便利なんですがコメント数が増えてくるとページが読みづらくなるのが難点ですよね。

できれば5chのようにコメント100件ごとにページを分けたい、という人も多いはず。…というか私がそうでした。

ここではdokuwikiのdiscussionプラグインで一定コメント件数ごとにページ分けする方法を紹介しますね。

  1. 注意点
  2. 変更方法
  3. コード説明
    1. $COMMENT_PER_PAGE = 100
    2. コード全体として…
  4. まとめ

注意点

今回の修正はdiscussionプラグインのソースコード自体を直にいじります。なのでdiscussionプラグインのアップデートなどで修正が消える可能性がありますのでご注意を。

あとコメントのスレッド表示を有効にしている場合は下記修正だとうまくいきません。コメントのページ分けはできますが1ページごとのコメント数がばらばら(スレッドに入れられたコメントの数を以下コードは考慮していないため)になります。

変更方法

dokuwiki/lib/plugins/discussion/action.phpを「array_reverse」で検索し、その下の「foreach ($data['comments'] as $cid => $value) {」を以下に書き換え

            $COMMENT_PER_PAGE = 100;
            $current_page = 1;
            if( count($data['comments']) > $COMMENT_PER_PAGE ){
            	$page_url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . rtrim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
            	$current_page = $_GET['commentpage'];
            	if( is_null($current_page) ){
            		$current_page = 1;
            	}
            	$output_urls = '<div class="comment-page-num-wrapper">';
            	for($i=1; $i<=(count($data['comments'])/$COMMENT_PER_PAGE)+1; $i++){
            		$page_query = "commentpage=" . $i;
            		if( strpos($page_query, $current_page) === false ){
            			$output_urls .= '<a class="comment-page-num" href="' . $page_url . '?' . $page_query . '#discussion__section">' . $i . '</a>';
            		}else{
            			$output_urls .= '<span class="comment-page-num-current">' . $i . '</span>';
            		}
            	}
              echo($output_urls);
            }
            
            foreach (array_slice($data['comments'], ($current_page-1)*$COMMENT_PER_PAGE, $COMMENT_PER_PAGE) as $cid => $value) {

これでコメント100件ごとにページ分けできます。

コード説明

以上で修正は終わっているのでここから先は読みたい人だけ読んでくださいね。

編集したコードの説明をサクッと書いておきます。

$COMMENT_PER_PAGE = 100

コメント何件ごとにページ分けするかの変数です。例えば「$COMMENT_PER_PAGE」を50にすればコメント50件ごとにページ分けできます。

コード全体として…

今回分量が多いんでコード全体として何やってるかを書いておきたいと思います。

やっているコトは、

  1. $COMMENT_PER_PAGEの数よりコメント数が多いならページ分け処理開始(少ない場合は従来と同じ表示)
  2. URLにクエリストリング「commentpage=ページ数」を追加したページ番号のリンクを出力(echo)
  3. URLにある「commentpage」の数値でコメントがすべて格納されている配列「$data['comments']」をarray_slice()関数でスライスして部分的にforeachを回してコメントを表示

という事をやっています。

まとめ

ここではdokuwikiのdiscussionプラグインでコメントのページ分けを実装する方法を紹介しました。

まとめると、クエリストリングにページ番号を追加してarray_slice()でその番号に応じてコメントの格納されている配列を切り取ればOK、という感じ。

参考にしてみてくださいね。

【おしらせ、というか完全なる宣伝】

文体がもうぜんぜん適当すぎてあれだけどものすごい自由に書いてるブログ「檸檬だくだく」もよろしく.寝る前に読める恐ろしくくだらないやつです.

こんなにも一ミリも目を引かれないタイトルを取り扱ってます: ココア20g / ハイチュウとかってさ / なぜ米と小麦を食べようと思ったのかの謎 /