테스트 사이트 - 개발 중인 베타 버전입니다

페이지네이션 0개부터 보이게 수정 채택완료

sssoll 1년 전 조회 2,569

안녕하세요 고수님들

게시판에서 페이지네이션 관련해서 질문드려요

 

수정하려는 게시판 스킨은 n+1개 이상 시 페이지네이션이 나오도록 설정되어있습니다. (스킨 기본 설정인가요?)

n개 설정은 관리자 페이지에서 가능한 상태입니다.

 

제가 수정하고 싶은 방향은 0개부터 페이지네이션이 계속 보이면서, 

게시물이 n개 이하일 때는 현재 페이지만 표시되도록 수정하고 싶습니다.

 

검색해보니 bbs/list.php와 lib/common.lib.php에서 수정이 필요한 것 같은데 전혀 감을 못 잡겠어요..ㅠㅠ

 bbs/list.php는 필요하시다면 댓글로 올려드리겠습니다!!

 

1. 게시판 스킨 list.skin.php 의 페이지네이션 부분

 

    <div id="k_pg_con">
            <?php echo $write_pages;  ?>
     </div>

 

2.  lib/common.lib.php 페이지네이션 부분


// 한페이지에 보여줄 행, 현재페이지, 총페이지수, URL
function get_paging($write_pages, $cur_page, $total_page, $url, $add="")
{
    //$url = preg_replace('#&amp;page=[0-9]*(&amp;page=)$#', '$1', $url);
    $url = preg_replace('#(&amp;)?page=[0-9]*#', '', $url);
    $url .= substr($url, -1) === '?' ? 'page=' : '&amp;page=';
    $url = preg_replace('|[^\w\-~+_.?#=!&;,/:%@$\|*\'()\[\]\\x80-\\xff]|i', '', clean_xss_tags($url));

    $str = '';
    if ($cur_page > 1) {
        $str .= '<a href="'.$url.'1'.$add.'" 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.'" 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.'" 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.'" class="pg_page pg_next">다음</a>'.PHP_EOL;

    if ($cur_page < $total_page) {
        $str .= '<a href="'.$url.$total_page.$add.'" class="pg_page pg_end">맨끝</a>'.PHP_EOL;
    }

    if ($str)
        return "<nav class=\"pg_wrap\"><span class=\"pg\">{$str}</span></nav>";
    else
        return "";
}

// 페이징 코드의 <nav><span> 태그 다음에 코드를 삽입
function page_insertbefore($paging_html, $insert_html)
{
    if(!$paging_html)
        $paging_html = '<nav class="pg_wrap"><span class="pg"></span></nav>';

    return preg_replace("/^(<nav[^>]+><span[^>]+>)/", '$1'.$insert_html.PHP_EOL, $paging_html);
}

// 페이징 코드의 </span></nav> 태그 이전에 코드를 삽입
function page_insertafter($paging_html, $insert_html)
{
    if(!$paging_html)
        $paging_html = '<nav class="pg_wrap"><span class="pg"></span></nav>';

    if(preg_match("#".PHP_EOL."</span></nav>#", $paging_html))
        $php_eol = '';
    else
        $php_eol = PHP_EOL;

    return preg_replace("#(</span></nav>)$#", $php_eol.$insert_html.'$1', $paging_html);
}
 

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트

다음과 같이 조건문을 추가하면 가능할 것 같습니다.

common.lib.php

</p>

<p>function get_paging($write_pages, $cur_page, $total_page, $url, $add="") {

    if ($total_page <= 1) {

        // 게시물이 한 페이지 이하일 때는 현재 페이지만 표시

        return '<nav class="pg_wrap"><span class="pg"><strong class="pg_current">1</strong></span></nav>';

    }</p>

<p>    //$url = preg_replace('#&amp;page=[0-9]*(&amp;page=)$#', '$1', $url);

    $url = preg_replace('#(&amp;)?page=[0-9]*#', '', $url);

    $url .= substr($url, -1) === '?' ? 'page=' : '&amp;page=';

    $url = preg_replace('|[^\w\-~+_.?#=!&;,/:%@$\|*\'()\[\]\\x80-\\xff]|i', '', clean_xss_tags($url));</p>

<p>    $str = '';

    if ($cur_page > 1) {

        $str .= '<a href="'.$url.'1'.$add.'" class="pg_page pg_start">처음</a>'.PHP_EOL;

    }</p>

<p>    $start_page = ( ( (int)( ($cur_page - 1 ) / $write_pages ) ) * $write_pages ) + 1;

    $end_page = $start_page + $write_pages - 1;</p>

<p>    if ($end_page >= $total_page) $end_page = $total_page;</p>

<p>    if ($start_page > 1) $str .= '<a href="'.$url.($start_page-1).$add.'" class="pg_page pg_prev">이전</a>'.PHP_EOL;</p>

<p>    if ($total_page > 1) {

        for ($k=$start_page;$k<=$end_page;$k++) {

            if ($cur_page != $k)

                $str .= '<a href="'.$url.$k.$add.'" 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;

        }

    }</p>

<p>    if ($total_page > $end_page) $str .= '<a href="'.$url.($end_page+1).$add.'" class="pg_page pg_next">다음</a>'.PHP_EOL;</p>

<p>    if ($cur_page < $total_page) {

        $str .= '<a href="'.$url.$total_page.$add.'" class="pg_page pg_end">맨끝</a>'.PHP_EOL;

    }</p>

<p>    if ($str)

        return "<nav class=\"pg_wrap\"><span class=\"pg\">{$str}</span></nav>";

    else

        return "";

}

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

s
sssoll
1년 전
웹메이킹 선생님 정말정말 감사합니다 해결되었습니다ㅠㅠㅠㅠㅠ
문제없이 잘 작동합니다!!!!!

댓글을 작성하려면 로그인이 필요합니다.

다음을 참고하셔서 원하시는 형식으로 만드시면 가능하지 않을까 합니다.

list.skin.php

</p>

<p><div id="k_pg_con">

    <?php 

    if ($total_page > 1) { // 게시물이 여러 페이지로 나뉘어질 때만 페이지네이션 표시

        echo $write_pages;  

    }

    ?>

</div>

 

common.lib.php

</p>

<p>function get_paging($write_pages, $cur_page, $total_page, $url, $add="") {

    if ($total_page <= 1) {

        return ""; // 게시물이 한 페이지 이하일 때는 페이지네이션을 표시하지 않음

    }</p>

<p>    // 나머지 코드는 그대로 유지

}</p>

<p>function page_insertbefore($paging_html, $insert_html) {

    if(!$paging_html)

        $paging_html = '<nav class="pg_wrap"><span class="pg"></span></nav>';</p>

<p>    return preg_replace("/^(<nav[^>]+><span[^>]+>)/", '$1'.$insert_html.PHP_EOL, $paging_html);

}</p>

<p>function page_insertafter($paging_html, $insert_html) {

    if(!$paging_html)

        $paging_html = '<nav class="pg_wrap"><span class="pg"></span></nav>';</p>

<p>    if(preg_match("#".PHP_EOL."</span></nav>#", $paging_html))

        $php_eol = '';

    else

        $php_eol = PHP_EOL;</p>

<p>    return preg_replace("#(</span></nav>)$#", $php_eol.$insert_html.'$1', $paging_html);

}

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

s
sssoll
1년 전
답변 감사합니다
말씀하신대로 적용했지만
페이지네이션이 나오지 않을 때 (게시물이 n개 이하 일때)는 현재 페이지 표시가 나타나야되는데 아무런 반응이 없습니다..ㅠㅠㅠ



common.lib.php에 이렇게 적용하는게 맞을까요?



function get_paging($write_pages, $cur_page, $total_page, $url, $add="")
{
if ($total_page <= 1) {
return ""; // 게시물이 한 페이지 이하일 때는 페이지네이션을 표시하지 않음
}//말씀해주신 부분 추

//$url = preg_replace('#&amp;page=[0-9]*(&amp;page=)$#', '$1', $url);
$url = preg_replace('#(&amp;)?page=[0-9]*#', '', $url);
$url .= substr($url, -1) === '?' ? 'page=' : '&amp;page=';
$url = preg_replace('|[^\w\-~+_.?#=!&;,/:%@$\|*\'()\[\]\\x80-\\xff]|i', '', clean_xss_tags($url));

$str = '';
if ($cur_page > 1) {
$str .= '<a href="'.$url.'1'.$add.'" 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.'" 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.'" 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.'" class="pg_page pg_next">다음</a>'.PHP_EOL;

if ($cur_page < $total_page) {
$str .= '<a href="'.$url.$total_page.$add.'" class="pg_page pg_end">맨끝</a>'.PHP_EOL;
}

if ($str)
return "<nav class=\"pg_wrap\"><span class=\"pg\">{$str}</span></nav>";
else
return "";
}

// 페이징 코드의 <nav><span> 태그 다음에 코드를 삽입
function page_insertbefore($paging_html, $insert_html)
{
if(!$paging_html)
$paging_html = '<nav class="pg_wrap"><span class="pg"></span></nav>';

return preg_replace("/^(<nav[^>]+><span[^>]+>)/", '$1'.$insert_html.PHP_EOL, $paging_html);
}

// 페이징 코드의 </span></nav> 태그 이전에 코드를 삽입
function page_insertafter($paging_html, $insert_html)
{
if(!$paging_html)
$paging_html = '<nav class="pg_wrap"><span class="pg"></span></nav>';

if(preg_match("#".PHP_EOL."</span></nav>#", $paging_html))
$php_eol = '';
else
$php_eol = PHP_EOL;

return preg_replace("#(</span></nav>)$#", $php_eol.$insert_html.'$1', $paging_html);
}

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인