그누보드 [G5] 댓글(코멘트) 페이징
페이지 정보
본문
댓글에 독립적인 페이징을 넣어서 댓글이 다수 등록된 경우 이용에 편리성을 제공합니다.
1. 그누보드5 / lib / common.lib.php 아래 내용 추가
// 코멘트 페이징을 위해 추가
function get_comment_paging($write_pages, $cur_page, $total_page, $url, $add="")
{
//$url = preg_replace('#&page=[0-9]*(&page=)$#', '$1', $url);
$url = preg_replace('#&page=[0-9]*#', '', $url) . '';
$str = '';
if ($cur_page > 1) {
$str .= '<a href="'.$url.'1'.$add.'#CommentTop" class="pg_page pg_start">처음</a>'.PHP_EOL;
}
$start_page = ( ( (int)( ($cur_page - 1 ) / $write_pages ) ) * $write_pages ) + 1;
$end_page = $start_page + $write_pages - 1;
if ($end_page >= $total_page) $end_page = $total_page;
if ($start_page > 1) $str .= '<a href="'.$url.($start_page-1).$add.'#CommentTop" class="pg_page pg_prev">이전</a>'.PHP_EOL;
if ($total_page > 1) {
for ($k=$start_page;$k<=$end_page;$k++) {
if ($cur_page != $k)
$str .= '<a href="'.$url.$k.$add.'#CommentTop" class="pg_page">'.$k.'<span class="sound_only">페이지</span></a>'.PHP_EOL;
else
$str .= '<span class="sound_only">열린</span><strong class="pg_current">'.$k.'</strong><span class="sound_only">페이지</span>'.PHP_EOL;
}
}
if ($total_page > $end_page) $str .= '<a href="'.$url.($end_page+1).$add.'#CommentTop" class="pg_page pg_next">다음</a>'.PHP_EOL;
if ($cur_page < $total_page) {
$str .= '<a href="'.$url.$total_page.$add.'#CommentTop" class="pg_page pg_end">맨끝</a>'.PHP_EOL;
}
if ($str)
return "<nav class=\"pg_wrap\"><span class=\"pg\">{$str}</span></nav>";
else
return "";
}
2-1. 그누보드5 / skin / board / basic / view_comment.skin.php
<!-- 댓글 시작 { -->
<section id="bo_vc">
<h2>댓글목록</h2>
<?php
$cmt_amt = count($list);
for ($i=0; $i<$cmt_amt; $i++) {
를 아래와 같이 변경
<!-- 댓글 시작 { -->
<div id="CommentTop"></div>
<section id="bo_vc">
<h2>댓글목록</h2>
<?php
if(!$c_rows) $c_rows = 10; // 표시댓글수가 지정되지 않았을경우 기본값 20
/* ?>
<div>
<div style="text-align:right;">
<form method="post" action="<?php echo G5_BBS_URL; ?>/board.php?bo_table=<?php echo $bo_table; ?>&wr_id=<?php echo $wr_id; ?>">
표시댓글수<input type="number" value="<?php echo $c_rows; ?>" name="c_rows" style="width:50px;">
<input type="submit" value="설정">
</form>
</div>
</div>
<?php
*/
// 코멘트 번호 계산식 및 페이징 표시
$c_total_count = count($list); // 전체 코멘트 수 할당 // 보여줄 개수
if ($c_total_count != 0) {
$c_total_page = ceil($c_total_count / $c_rows); // 전체 페이지 계산
if (!$c_page) $c_page = $c_total_page; // 페이지가 없으면 첫 페이지 (1 페이지)
$c_from_record = ($c_page - 1) * $c_rows; // 시작 코멘트 구하기
$c_last_record = $c_from_record + $c_rows; // 끝 코멘트 구하기
if($c_last_record > $c_total_count) { // 마지막 코멘트가 전체 코멘트 보다 크면 전체 코멘트로 할당
$c_last_record = $c_total_count;
}
}
// 페이징 처리 함수 및 표시
$c_pagelist = get_comment_paging($c_rows, $c_page, $c_total_page, G5_BBS_URL ."/board.php?bo_table={$bo_table}&c_rows={$c_rows}&wr_id={$wr_id}&c_page=");
//if ($c_pagelist) { echo $c_pagelist; }
$cmt_amt = $c_last_record;
$i = $c_from_record;
for ($i; $i<$cmt_amt; $i++) {
2-2. 그누보드5 / skin / board / basic / view_comment.skin.php
</section>
<!-- } 댓글 끝 -->
를 아래의 내용으로 변경
<?php
if ($c_pagelist) { echo $c_pagelist; }
?>
<?php /* ?>
<div>
<div style="text-align:right;">
<form method="post" action="<?php echo G5_BBS_URL; ?>/board.php?bo_table=<?php echo $bo_table; ?>&wr_id=<?php echo $wr_id; ?>">
표시댓글수<input type="number" value="<?php echo $c_rows; ?>" name="c_rows" style="width:50px;">
<input type="submit" value="설정">
</form>
</div>
</div>
<?php */ ?>
</section>
<!-- } 댓글 끝 -->
2-3. 그누보드5 / skin / board / basic / view_comment.skin.php
<input type="hidden" name="comment_id" value="<?php echo $c_id ?>" id="comment_id">
를 아래와 같이 내용 추가
<input type="hidden" name="comment_id" value="<?php echo $c_id ?>" id="comment_id">
<input type="hidden" name="c_page" value="<?php echo $c_page; ?>">
3. 그누보드5 / bbs / write_comment.php
goto_url(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table.'&wr_id='.$wr['wr_parent'].'&'.$qstr.'&#c_'.$comment_id);
를 아래의 것으로 변경
goto_url(G5_HTTP_BBS_URL ."/board.php?bo_table={$bo_table}&wr_id={$wr['wr_parent']}&page={$page}&c_page={$c_page}&{$qstr}#c_{$comment_id}");
참고자료
https://sir.kr/g5_tip/3336
https://sir.kr/qa/206990
1. 그누보드5 / lib / common.lib.php 아래 내용 추가
// 코멘트 페이징을 위해 추가
function get_comment_paging($write_pages, $cur_page, $total_page, $url, $add="")
{
//$url = preg_replace('#&page=[0-9]*(&page=)$#', '$1', $url);
$url = preg_replace('#&page=[0-9]*#', '', $url) . '';
$str = '';
if ($cur_page > 1) {
$str .= '<a href="'.$url.'1'.$add.'#CommentTop" class="pg_page pg_start">처음</a>'.PHP_EOL;
}
$start_page = ( ( (int)( ($cur_page - 1 ) / $write_pages ) ) * $write_pages ) + 1;
$end_page = $start_page + $write_pages - 1;
if ($end_page >= $total_page) $end_page = $total_page;
if ($start_page > 1) $str .= '<a href="'.$url.($start_page-1).$add.'#CommentTop" class="pg_page pg_prev">이전</a>'.PHP_EOL;
if ($total_page > 1) {
for ($k=$start_page;$k<=$end_page;$k++) {
if ($cur_page != $k)
$str .= '<a href="'.$url.$k.$add.'#CommentTop" class="pg_page">'.$k.'<span class="sound_only">페이지</span></a>'.PHP_EOL;
else
$str .= '<span class="sound_only">열린</span><strong class="pg_current">'.$k.'</strong><span class="sound_only">페이지</span>'.PHP_EOL;
}
}
if ($total_page > $end_page) $str .= '<a href="'.$url.($end_page+1).$add.'#CommentTop" class="pg_page pg_next">다음</a>'.PHP_EOL;
if ($cur_page < $total_page) {
$str .= '<a href="'.$url.$total_page.$add.'#CommentTop" class="pg_page pg_end">맨끝</a>'.PHP_EOL;
}
if ($str)
return "<nav class=\"pg_wrap\"><span class=\"pg\">{$str}</span></nav>";
else
return "";
}
2-1. 그누보드5 / skin / board / basic / view_comment.skin.php
<!-- 댓글 시작 { -->
<section id="bo_vc">
<h2>댓글목록</h2>
<?php
$cmt_amt = count($list);
for ($i=0; $i<$cmt_amt; $i++) {
를 아래와 같이 변경
<!-- 댓글 시작 { -->
<div id="CommentTop"></div>
<section id="bo_vc">
<h2>댓글목록</h2>
<?php
if(!$c_rows) $c_rows = 10; // 표시댓글수가 지정되지 않았을경우 기본값 20
/* ?>
<div>
<div style="text-align:right;">
<form method="post" action="<?php echo G5_BBS_URL; ?>/board.php?bo_table=<?php echo $bo_table; ?>&wr_id=<?php echo $wr_id; ?>">
표시댓글수<input type="number" value="<?php echo $c_rows; ?>" name="c_rows" style="width:50px;">
<input type="submit" value="설정">
</form>
</div>
</div>
<?php
*/
// 코멘트 번호 계산식 및 페이징 표시
$c_total_count = count($list); // 전체 코멘트 수 할당 // 보여줄 개수
if ($c_total_count != 0) {
$c_total_page = ceil($c_total_count / $c_rows); // 전체 페이지 계산
if (!$c_page) $c_page = $c_total_page; // 페이지가 없으면 첫 페이지 (1 페이지)
$c_from_record = ($c_page - 1) * $c_rows; // 시작 코멘트 구하기
$c_last_record = $c_from_record + $c_rows; // 끝 코멘트 구하기
if($c_last_record > $c_total_count) { // 마지막 코멘트가 전체 코멘트 보다 크면 전체 코멘트로 할당
$c_last_record = $c_total_count;
}
}
// 페이징 처리 함수 및 표시
$c_pagelist = get_comment_paging($c_rows, $c_page, $c_total_page, G5_BBS_URL ."/board.php?bo_table={$bo_table}&c_rows={$c_rows}&wr_id={$wr_id}&c_page=");
//if ($c_pagelist) { echo $c_pagelist; }
$cmt_amt = $c_last_record;
$i = $c_from_record;
for ($i; $i<$cmt_amt; $i++) {
2-2. 그누보드5 / skin / board / basic / view_comment.skin.php
</section>
<!-- } 댓글 끝 -->
를 아래의 내용으로 변경
<?php
if ($c_pagelist) { echo $c_pagelist; }
?>
<?php /* ?>
<div>
<div style="text-align:right;">
<form method="post" action="<?php echo G5_BBS_URL; ?>/board.php?bo_table=<?php echo $bo_table; ?>&wr_id=<?php echo $wr_id; ?>">
표시댓글수<input type="number" value="<?php echo $c_rows; ?>" name="c_rows" style="width:50px;">
<input type="submit" value="설정">
</form>
</div>
</div>
<?php */ ?>
</section>
<!-- } 댓글 끝 -->
2-3. 그누보드5 / skin / board / basic / view_comment.skin.php
<input type="hidden" name="comment_id" value="<?php echo $c_id ?>" id="comment_id">
를 아래와 같이 내용 추가
<input type="hidden" name="comment_id" value="<?php echo $c_id ?>" id="comment_id">
<input type="hidden" name="c_page" value="<?php echo $c_page; ?>">
3. 그누보드5 / bbs / write_comment.php
goto_url(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table.'&wr_id='.$wr['wr_parent'].'&'.$qstr.'&#c_'.$comment_id);
를 아래의 것으로 변경
goto_url(G5_HTTP_BBS_URL ."/board.php?bo_table={$bo_table}&wr_id={$wr['wr_parent']}&page={$page}&c_page={$c_page}&{$qstr}#c_{$comment_id}");
참고자료
https://sir.kr/g5_tip/3336
https://sir.kr/qa/206990
댓글목록
등록된 댓글이 없습니다.