제목 | 페이징네이션 | ||
---|---|---|---|
글쓴이 | 승버미 | 작성시각 | 2011/11/29 14:54:45 |
|
|||
contoll $this->load->helper('url'); $this->load->library('common'); $this->seg_exp = $this->common->segment_explode($this->uri->uri_string()); if(in_array("page", $this->seg_exp)) { $arr_key = array_keys($this->seg_exp, "page"); $arr_val = $arr_key[0] + 1; $page = $this->seg_exp[$arr_val]; $data['page_account']=$page; } else { $page = 1; $data['page_account']=$page; } $rp = 1; $limit = 9; $start = (($page-1)*$rp); $this->load->model('table/campaign_model'); $totalData['total'] = $this->campaign_model->find_campaign(); $total = sizeof($totalData['total']); $data['search_total'] = $total; //검색후 페이징처리위한.. $this->url_seg = $this->seg_exp; $arr_s = array_search('page', $this->url_seg); if($arr_s == ''){ array_splice($this->url_seg, $arr_s, 0); } else { array_splice($this->url_seg, $arr_s, 2); } $urls = implode('/',$this->url_seg); $data['pagination_links'] = $this->common->pagination($urls."/page",$this->common->paging($page,$rp,$total,$limit),true); $this->load->view('page/default_page', $data); libraries common function segment_explode($seg) { //세크먼트 앞뒤 '/' 제거후 uri를 배열로 반환 $len = strlen($seg); if(substr($seg, 0, 1) == '/') { $seg = substr($seg, 1, $len); } $len = strlen($seg); if(substr($seg, -1) == '/') { $seg = substr($seg, 0, $len-1); } $seg_exp = explode("/", $seg); return $seg_exp; } function paging($page,$rp,$total,$limit) { $limit -= 1; $mid = floor($limit/2); if ($total>$rp) $numpages = ceil($total/$rp); else $numpages = 1; if ($page>$numpages) $page = $numpages; $npage = $page; while (($npage-1)>0&&$npage>($page-$mid)&&($npage>0)) $npage -= 1; $lastpage = $npage + $limit; if ($lastpage>$numpages) { $npage = $numpages - $limit + 1; if ($npage<0) $npage = 1; $lastpage = $npage + $limit; if ($lastpage>$numpages) $lastpage = $numpages; } while (($lastpage-$npage)<$limit) $npage -= 1; if ($npage<1) $npage = 1; //echo $npage; exit; $paging['first'] = 1; if ($page>1) $paging['prev'] = $page - 1; else $paging['prev'] = 1; $paging['start'] = $npage; $paging['end'] = $lastpage; $paging['page'] = $page; if (($page+1)<$numpages) $paging['next'] = $page + 1; else $paging['next'] = $numpages; $paging['last'] = $numpages; $paging['total'] = $total; $paging['iend'] = $page * $rp; $paging['istart'] = ($page * $rp) - $rp + 1; if (($page * $rp)>$total) $paging['iend'] = $total; return $paging; } function pagination($link, $paging_data) { $links = ""; // The first page $links .= anchor($link . '/' . $paging_data['first'], 'First', array('title' => 'Go to the first page', 'class' => 'first_page')); $links .= "\n"; // The previous page $links .= anchor($link . '/' . $paging_data['prev'], '<', array('title' => 'Go to the previous page', 'class' => 'prev_page')); $links .= "\n"; // The other pages for ($i = $paging_data['start']; $i <= $paging_data['end']; $i++) { if ($i == $paging_data['page']) $current = '_current'; else $current = ""; $links .= anchor($link . '/' . $i, $i, array('title' => 'Go to page ' . $i, 'class' => 'page' . $current)); $links .= "\n"; } // The next page $links .= anchor($link . '/' . $paging_data['next'], '>', array('title' => 'Go to the next page', 'class' => 'next_page')); $links .= "\n"; // The last page $links .= anchor($link . '/' . $paging_data['last'], 'Last', array('title' => 'Go to the last page', 'class' => 'last_page')); $links .= "\n"; return $links; } default_page.php <?=$pagination_links?> ? 페이징네이션 구현은 됫는데 여러 페이지에 페이징네이션을 넣을건데 컨트롤에 일일이 쓰자니 너무 지저분해보여서요 ㅜㅜ 간단히 불러올수 있는방법이 있을까여? |
|||
다음글 | 재질문 드립니다. ci 2.1 + hmvc 5.4 (2) | ||
이전글 | 컨트롤러를에서 다른 컨트롤러 호출하는 법 있나요? (2) | ||
변종원(웅파)
/
2011/11/29 15:57:40 /
추천
0
|
승버미
/
2011/11/29 17:51:32 /
추천
0
function getPaginationLinks () { //주소를 불러오기위한 세팅 $this->load->helper('url'); $this->load->library('common'); $this->seg_exp = $this->common->segment_explode($this->uri->uri_string()); if(in_array("page", $this->seg_exp)) { $arr_key = array_keys($this->seg_exp, "page"); $arr_val = $arr_key[0] + 1; $page = $this->seg_exp[$arr_val]; $data['page_account']=$page; } else { $page = 1; $data['page_account']=$page; } $rp = 1; //화면에 출력할 개수 $limit = 9; //페이지 갯수 $start = (($page-1)*$rp); $this->load->model('table/campaign_model'); $totalData['total'] = $this->campaign_model->find_campaign(); $total = sizeof($totalData['total']); $data['search_total'] = $total; //검색후 페이징처리위한.. $this->url_seg = $this->seg_exp; $arr_s = array_search('page', $this->url_seg); if($arr_s == ''){ array_splice($this->url_seg, $arr_s, 0); } else { array_splice($this->url_seg, $arr_s, 2); } $urls = implode('/',$this->url_seg); $data['rp'] = $rp; $data['page'] = $this->common->pagination($urls."/page",$this->common->paging($page,$rp,$total,$limit),true); $data['start'] = $start; return $data; }이런식으로 처리했습니다 $todayData['today'] = $this->campaign_model->find_campaign_page(array('cam_start_date <=' => $today , 'cam_end_date >=' => $today),'',$rp,$start); 근데 조건절로 찾아오게 되면 위에서 전체배열사이즈로 잡아서 한페이지당 1개씩출력 검색 3개가 나왔을떄 페이지수가 검색수에 맞게 안나오고 전체 페이지수로 나오네염 ㅜㅜ 페이지싸이즈 부분도 함수로 따로 만들어야하나염? |
변종원(웅파)
/
2011/11/29 17:57:13 /
추천
0
total은 말 그대로 전체수입니다. 검색조건이 없을때는 그 게시판의 전체게시물수,
검색조건이 있을때는 검색결과의 총수입니다. |
승버미
/
2011/11/29 18:04:15 /
추천
0
^^ 좀더 고민해보고 해결되면 해결부분 올릴게염^^
웅파님 항상 답변 감사합니다^^ |
변종원(웅파)
/
2011/11/29 18:12:10 /
추천
0
쉽게 말해서
$totalData [ 'total' ] = $this ->campaign_model->find_campaign();
|
승버미
/
2011/11/30 11:06:59 /
추천
0
$totalData['today'] = $this->campaign_model->find_campaign(array('cam_start_date <=' => $today , 'cam_end_date >=' => $today)); $data['pagenation_links'] = $this->getPaginationLinks($totalData); function getPaginationLinks ($totalData) { //주소를 불러오기위한 세팅 if($totalData == null){ $total = null; }else { $total = $totalData['today']; } if($total == null) { $totalData['total'] = $this->campaign_model->find_campaign(); $total = sizeof($totalData['total']); }else { $totalData['total'] = $total; $total = sizeof($totalData['total']); }요렇게 추가했음요~~ 감사욤^^ |
그 함수 하나에 파라미터만 넘겨서 처리하게 하면 한줄로 정리하실 수 있습니다.
(어렵게 생각하실 필요가 없습니다.)