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

그룹 최신글 + 페이징일때 출력되는 게시글 개수 제어하는 법 채택완료

호야슈 5년 전 조회 2,714

그룹 최신글에 페이징을 추가하고 있습니다.

$write_pages까지 정상 작동되게했는데, 출력되는 그룹 내 게시글의 개수를 제어하는 부분에서 막힙니다.

그룹 최신글의 구조를 제가 분석하기론 이러합니다.
-> 그룹이 있는 만큼 for문이 돌고 그 안에서 for문이 또 돌아서 게시글을 하나하나 가져옴

전체 출력 될 게시글을 제어하고 싶은데 어디에 limit를 걸어야하는지 모르겠네요..ㅠㅠ

쿼리에서 도저히 모르겠어서  array_splice($list, $rows)를 이용해서 배열의 페이징 부분만큼만 보여지게 해보려했는데도 씨알도 안먹히네요.. (예를 들어 이런식이요 array_splice($list, $from_record, $rows))

 

아래 코드로 하면 45개 게시글은 정상출력되는데, limt를 안해서 페이징이 안먹힙니다....

고수님들 부탁드립니다!!!!

 

</strong></p>

<p>//latest_group_paging사용법</p>

<p>//latest_group_paging("basic_group_list",그룹아이디, $_SERVER['PHP_SELF']."?gid=그룹아이디",$page,"page",출력라인,제목글자수,페이징 넘버 출력수);

<strong>latest_group_paging("basic_group_list_m",$gid, $_SERVER['PHP_SELF']."?gid=$gid",$page,"page",45,60,5);</strong></p>

<p> </p>

<p>// 그룹 최신글 추출 + 페이징

function latest_group_paging($skin_dir="", $gid, $url, $page=1, $page_name="page", $rows=5, $subject_len=40, $write_page=5, $total_count = '', $options="")

{

    global $fg_cfg, $config;</p>

<p>    if ($skin_dir) {

        $latest_skin_path = "{$fg_cfg['boardPath']}/latest/$skin_dir";

        $latest_skin_url = "{$fg_cfg['boardUrl']}/latest/$skin_dir";

    } else {

        $latest_skin_path = "{$fg_cfg['boardPath']}/latest/basic";

        $latest_skin_url = "{$fg_cfg['boardUrl']}/latest/basic";

    }

    

   $list = array();

    

    $group = get_group($gid);

    $idx = 0;

    $id = 0;

    $sql = " select * from fg_board where gid = '$gid'";

    $result = sql_query($sql);

    for ($bcnt=0; $board = sql_fetch_array($result); $bcnt++) {

        $bbs[] = $board;

    }

    for($bcnt=0; $bcnt < count($bbs); $bcnt++) {

        $board = $bbs[$bcnt];

        $tmp_write_table = get_fg_dbtable($board['bid']);

        

        $sql = " select * from $tmp_write_table where wr_is_comment = 0 order by wr_num ";

        $result = sql_query($sql);

        for ($i=0; $row = sql_fetch_array($result); $i++) {

            $id++;

        }

        

        // 게시물 구해오기

        $sql = " select * from $tmp_write_table where wr_is_comment = 0 order by wr_num";

        $result = sql_query($sql);

        for ($i=0; $row = sql_fetch_array($result); $i++) {

            $list[$idx] = get_list($row, $board, $latest_skin_path, $subject_len);

            $list[$idx]['board_subject']  = $board['bo_subject'];

            $list[$idx]['board_bid']  = $board['bid'];

            $is_teacher_comment = true;

            $idx++;

        }

        unset($board);

    }

    unset($bbs);

    

    $list = array_orderby($list, 'wr_datetime', SORT_DESC);

    array_splice($list, $rows);

    </p>

<p>//페이징과 관련있는 부분 ↓

<span style="background-color:#dddddd;">    if($total_count == ""){</span>

<span style="background-color:#dddddd;">        $total_count = $id;</span>

<span style="background-color:#dddddd;">    }</span>

<span style="background-color:#dddddd;">    </span>

<span style="background-color:#dddddd;">    $total_page  = ceil($total_count / $rows);  // 전체 페이지 계산</span>

<span style="background-color:#dddddd;">    if (!$page) { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이 지)</span>

<span style="background-color:#dddddd;">    $from_record = ($page - 1) * $rows; // 시작 열을 구함</span>

<span style="background-color:#dddddd;">    </span>

<span style="background-color:#dddddd;">    if(strstr($url, "?")) { </span>

<span style="background-color:#dddddd;">        $connect = "&amp;";</span>

<span style="background-color:#dddddd;">    } else { </span>

<span style="background-color:#dddddd;">        $connect = "?";</span>

<span style="background-color:#dddddd;">    }</span></p>

<p><span style="background-color:#dddddd;">    $write_pages = get_paging($write_page, $page, $total_page, $url.$connect.$page_name."=");</span>

<span style="background-color:#dddddd;">    </span>

    ob_start();

    include "$latest_skin_path/latest.skin.php";

    $content = ob_get_contents();

    ob_end_clean();</p>

<p>    return $content;

} </p>

<p><strong>

 

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

답변 1개

채택된 답변
+20 포인트
e
5년 전

query 문에서 limit 로 불러오는 페이지는 제한하는게 아니고,

include "$latest_skin_path/latest.skin.php";
이 파일에서 출력할때 제어를 해줘야 합니다.

for($i=$from_record; $i<$page*$rows; $i++) {

  echo $list[$i]['subject'];

}

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

답변에 대한 댓글 1개

호야슈
5년 전
네! 다시 확인해보겠습니다! 답변 감사합니다.

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

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

로그인