CI 묻고 답하기

제목 CI 페이지네이션 오류.. 해결방법좀알려주세요
글쓴이 박세 작성시각 2013/11/20 10:19:41
댓글 : 9 추천 : 0 스크랩 : 0 조회수 : 18955   RSS
 한페이지에 표시할 게시물은 잘나오지만
페이지 링크를 보면
1 2 3 > 이런식으로 계속 고정되어있습니다.
2로 눌러서 이동하게되면 페이지는 바뀌지만 페이지 링크는 계속 1로 되어있습니다.
그리고  게시물수가 50개라서 1 2 3 4 5 > 이렇게 나와야하는데 1 2 3 > 계속 고정되어있네요..

소스 한번 올려봅니다..
컨트롤부분 -----

 public function lists(){

  //페이지네이션 라이브러리 로딩 추가
  $this->load->library('pagination');

  //페이지네이션 설정
  $config['base_url']='http://board.globalweb-test.com/index.php/main/lists/';
    $config['total_rows']=$this->todo_m->get_list($this->uri->segment(3),'count'); //게시물의 전체 개수3
  $config['per_page']=5;//한 페이지에 표시할 게시물 수
  $config['uri_segment']=5;//페이지 번호가 위치한 세그먼트

  //페이지네이션 초기화
  $this->pagination->initialize($config);
  //페이징 링크를 생성하여 view에서 사용할 변수에 할당
  $data['pagenav']=$this->pagination->create_links();
  //게시물 목록을 불러오기 위한 oiffset,limit값 가져오기q
   $page=$this->uri->segment(3,1);


  if($page>1){
   $start=(($page/$config['per_page'])) * $config['per_page'];
  }else{
   $start=($page-1)*$config['per_page'];
  }
  $limit=$config['per_page'];

  $data['list']=$this->todo_m->get_list($this->uri->segment(3),'',$start,$limit);

  $this->load->view('/list_v',$data);
}
모델 부분-----

 function get_list($table='tboard',$type='',$offset='',$limit=''){
  $limit_query='';
  
  if($limit !='' OR $offset !=''){
   $limit_query='LIMIT '.$offset.','.$limit;
     
  }
  
  $sql="select * from tboard order by board_num DESC ".$limit_query; 

  $query=$this->db->query($sql);
  $result;
  if($type == 'count'){
   $result = $query->num_rows();
   //$this->db->count_all($table);
   
   
  }else{
   $result=$query->result();
  }
  return $result;
}
}

뷰 부분 ---

<?php echo $pagenav;?>
1

 다음글 [해결] http://주소/index.php/welco... (4)
 이전글 $_POST값을 이용하는 메써드를 호출할려고 합니다. (1)

댓글

헛발이 / 2013/11/20 11:03:50 / 추천 0
$start,$limit 이부분이 좀 맘에 걸립니다..

윗소스는 좀 보기 어려워서 어디 잘못인지는 직접 테스트 해보지 않으면 모르겠지만..

$offset , $limit는 본인이 직접 계산해야 하는건 아니고..
per_page과 페이지번호로 데이터를 불러 오면 될듯 싶은데요...
박세 / 2013/11/20 11:09:59 / 추천 0
 음... 그쪽부분은 제가 디버깅해보았는데
문제없이 데이터값 들어오고 정상이였습니다...
헛발이 / 2013/11/20 11:12:02 / 추천 0
total_rows 값도 정확하게 전체데이터값이 들어 오나요?
박세 / 2013/11/20 11:14:52 / 추천 0
 네... 방금 확인해봤는데 토탈도 정확하게 나옵니다...
하.. 미치겟네요
헛발이 / 2013/11/20 11:22:14 / 추천 0
제가 사용중인 소스의 일 부분을 발취 해 봅니다..정답은 아니지만..
소스가 좀 보기 어려운거 같아서 올려 봅니다..

$data['page'] = 'URI에서 페이지번호를 찾아오고..'

$data['total'] = $this->test_m->getAll();
$config = array(
    'display_pages' => FALSE,
    'base_url' => '/test/lists/page/',
    'total_rows' => $data['total'],
    'per_page' => 20,
    'num_links' => 5,
);
$this->load->library('pagination');
$this->pagination->initialize($config);

$data['query'] = $this->test_m->getList($config['per_page'], $data['page']);



모델에서

function getAll()
{
$query = $this->db->get($this->test);
return $query->num_rows();
}

function getList($limit=0, $offset=0)
{
$this->db->limit($limit, $offset);
$query = $this->db->get($this->test);
return $query;
}

박세 / 2013/11/20 11:36:34 / 추천 0
이렇게 도와주시니 감사합니다..
제가 아직 초보라서 .. 죄송하지만 컨트롤부분 좀 더 소스를 볼수있을까요... 

헛발이 / 2013/11/20 11:38:35 / 추천 0
http://sample.cikorea.net/sample_view/class/pagination

여기를 보시고 연습해 보시는게 좋을거 같네요..
수야디벨 / 2013/11/20 11:39:07 / 추천 0
 
우선 페이지네이션 메뉴얼을 정독하시길 권해드립니다 .

http://codeigniter-kr.org/user_guide_2.1.0/libraries/pagination.html

1. 1 2 3 4 5 > 이렇게 나와야 하는데 1 2 3 > 이렇게 나와요.

이 문제는 헛발이님이 올려주신 소스에 보면 num_links => 5, 이부분이 있죠?

메뉴얼에도 나와 있지만 num_links => 5 의 숫자에 따라서 최초 보여지는 링크 숫자가 결정되요.

메뉴얼에 보면 기본 설정은 um_links=> 2 입니다. 그렇기 때문에 1 2 3 > 으로 보이는거에요.


2.다른 페이지로 넘어갔는데 링크 부분에 계속 1페이지다 ?

이 역시 메뉴얼에도 나와 있지만 , 페이지 네이션은 기본설정이 $config['uri_segment'] = 3;

이기 때문입니다. 

HTTP://ip/controll/function/per_page 형식이 기본 형식이에요.

만약 주소가 HTTP://ip/controll/function/variable/per_page 라면,

당연히 페이지 링크가 계속 1페이지죠. 저기서 per_page는 세그먼트가 4거든요.

$config['uri_segment'] = 4; 로해야 링크가 바뀝니다.


박세 / 2013/11/20 11:47:51 / 추천 0
 헛발이//수야디벨 두분다 정말 고맙습니다!
수야디벨님 글읽고 수정을 해보니 되네요..
차근차근 원리부터 알아가도록하겠습니다!
감사합니다