CI 묻고 답하기

제목 페이징 조언좀 해주세요
글쓴이 앙마 작성시각 2013/05/22 15:29:46
댓글 : 15 추천 : 0 스크랩 : 0 조회수 : 17856   RSS
페이징을 하려고 합니다

단순히 계시판이 아닌 유저가 접속시 그 유저가 등록한 것만을 보여주려고 하는데  

$this->load->library('pagination');

$config['base_url'] = 'http://example.com/index.php/test/page/';
$config['total_rows'] = '200';
$config['per_page'] = '20'; 

$this->pagination->initialize($config); 

echo $this->pagination->create_links();

이런 것을 찾기는 했는데 잘 모르겠더군요ㅠ_ㅠ

우선 모델을 갔다와서 데이터를 가져와야 할 것 같은데 그건 어디에 있는 것인지도 모르겠고요

마지막으로 페이징은 컨트롤러에서 만들어서 사용하는건가요?? 여러번 사용할 경우 객체화 시켜서 묶음으로

필요로 하는 변수값을 넣어줘서 사용할 수 있을 것 같은데 예제가 있으면 알려주십사하네요
ㅠㅠ

눈뜬 장님이라;; 부탁드리겠습니다(--)(__)(--)(__)
 다음글 uri 라우터 시 질문 (4)
 이전글 404 에러 (4)

댓글

변종원(웅파) / 2013/05/22 15:34:56 / 추천 0
포럼소스나 마냐님 소스 보시고 참고하세요.

그런 목적으로 공개한겁니다.
앙마 / 2013/05/22 15:57:59 / 추천 0
 웅파//

============model==========
// total
    function total_entry()
    {
$query = $this->db->get('board');
        return $query->num_rows();
    }
 
 
// select
    function select_entry($list_num,$offset)
    {
$query = $this->db->get('board',$list_num,$offset);
        return $query->result();
    }

=========controller===============
function table()
{
$this->load->view('board_top');
        $this->load->model('Board_model');
      
 
$config['base_url']= '/board/table/';
$data['perPage']=$config['per_page']= 5; 
$data['pageNum']=$offset = $this->uri->segment(3,0);  
$data['result']=$this->Board_model->select_entry($data['perPage'], $offset); 
$data['getTotalData']=$config['total_rows']=$this->Board_model->total_entry(); 
$config['page_query_string']=FALSE;
$this->pagination->initialize($config); 
$data['pagenav'] = $this->pagination->create_links(); 
$this->load->view('board_table', $data); 
$this->load->view('board_bottom');
 
}

================================

자료를 찾아서 하는데 페이징 역할을 하는 부분만 잘라낸거 같습니다

근대 다른 곳에서 찾았을때는 라이브러리도 넣어주고 하는데 이곳에는 그렇지가 않더군요

그래도 돌아간다기에 일단 제가 갖고 있는 곳에 접목시켜서 하는데 

$this->pagination->initialize($config); 

이 부분에서 에러가 발생하네요ㅠ_ㅠ

다운받은 폴더를 봐도 컨트롤러, 뷰, 모델밖에 없는데 무언가를 빠트린걸까요??
변종원(웅파) / 2013/05/22 16:09:22 / 추천 0
셋팅상으로는 문제가 없습니다.

어떤 에러가 나는지 올려주셔야.... ^^

그리고 주소를 어떻게 구현했는지에 따라 다음 옵션을 줘야 합니다.
기본적으로 세번째 세그먼트가 페이지변수라고 가정을 합니다만
주소가 /controller/method/page/1 같은 경우엔 아래 값을 4를 줘야 제대로 작동합니다.

$config['uri_segment'] = 3;

앙마 / 2013/05/22 16:18:33 / 추천 0
 웅파//

ㅠ_ㅠ 번거롭게 해서 죄송합니다 일단 자료는 받아오게 됐네요;; 라이브러리를 넣지 않아서 안되던건데..

다른 문제가 생겼어요ㅠㅠ 페이지 이동하려고 아래 나온 네비번호 클릭하면 이동을 하지 않는데;;

다운받은 폴더가 한글이 다깨지는 바람에;;; 무엇을 어떻게 설정해야 하는지 잘 모르겠네요;;

아무튼 한글 깨지는 건 둘째치고 문제는 페이지 이동이 되지 않네요;;ㅠㅠ 다른 분들꺼 보고 찾아보고 있기는 하지만;;

$config['uri_segment'] = 10;
$data['pageNum']=$offset = $this->uri->segment(3,0);

이런 방식으로 사용하는게 맞나요?? 순서가 맞는지 모르겠네요;; total페이지 수를 구해서 넣는 곳 같은데;;음....

아닌가;; 단순히 하단에 몇 개의 바로가기 페이징을 보여주는 건가...

대충 짐작으로는 method/page/1 에서 page/1이 나오지가 않네요;; 어디를 건드려야할지;; 덜덜덜;;

그리고 위쪽에서 view('logincheck', $data);    $data로 넘기잖아요

저는 array('변수명'=>$data)로 해서 view 화면에서 변수면 as $entry로 했는데 에러가 나네요;;

궁금합니다ㅠㅠ 마지막으로

$this->pagination->create_links(); 이거는 기본적으로 제공되는 것 같은데 무슨 역할을 하는건가요??
변종원(웅파) / 2013/05/22 16:24:23 / 추천 0
매뉴얼에 다 나와있습니다. 

올려주신 소스에는 base_url에 page/ 가 없습니다.

주소는 개발자가 마음대로 컨트롤 하는 겁니다. 

c/m/p/1 로 만들건지 c/m/1 로 만들건지에 따라 base_url이 달라집니다.
변종원(웅파) / 2013/05/22 16:26:47 / 추천 0
주소를 먼저 정형화하세요.


/cont/meth/page/1 의 형태로 계속 쓴다면
base_url은 /cont/meth/page/ 가 됩니다.


/cont/meth/1 의 형태로 쓴다면 /cont/meth/ 가 될거구요
앙마 / 2013/05/22 16:37:43 / 추천 0
 웅파//

마지막으로 한 번만더 질문이요!!

url넘어가네요;; 제가 실수해서;;

그런데 url만 넘어가지 아무런 데이터가 뜨지 않군요;;ㅠㅠ

거기에 페이지를 이동시키면 page/1 씩 증가하는 것이 아닌 단번에 8이 오릅니다

아마도 한 페이지에 보여주는 갯수에 영향을 받는거 같은데;;

그리고 config를 봤는데 pagination이 없던데-0-;;
변종원(웅파) / 2013/05/22 20:52:51 / 추천 0
8씩 증가하는건 매뉴얼 보시면 있습니다. 

우리나라 방식으로 1,2,3 으로 보여줄지 1, 8, 16 으로 보여줄지..

데이터 안뜨는건 모델에서 제대로 처리를 못하는 겁니다. 
쿼리가 어떻게 나오는지 그 쿼리를 mysql콘솔에서 실행해보세요.
앙마 / 2013/05/23 10:01:01 / 추천 0
웅파//

조언 감사드립니다ㅠㅠ

이유를 대충 찾은 것 같네요 다름 아닌 제이쿼리모바일 사용으로 인해 데이터를 받아오지 못했던거네요ㅠㅠ

완전 삽질만 열심히 한 느낌...

그런데 지우고 나면 페이지 이동해서 데이터를 뽑아오기는 하는데요

페이지 이동 네비바가 사라지네요ㅠㅠ

아.... 가야할 길이 멀군요

제이쿼리 모바일도 합쳐서 하려먼 어떻게 해야하나...
risa / 2013/05/23 10:18:44 / 추천 0
 제이쿼리 모바일과 페이지네이션과 어떤 관계가 있는지 잘 모르겠네요

혹 문제가 생긴다면 페이지 데이타 관련인것 같기도 한데..

페이지네이션은 결과적으로 형태의 차이일 뿐이지

get 방식으로 게시판 접근하는 거랑 차이가 없습니다.

밑에 네비 숫자도 그냥 링크 숫자 일뿐이구요.

숫자를 기준으로 limit 한것 일뿐이라..


혹시 제이쿼리 모바일의 페이지네이션 디자인에 맞추어 CI 의 페이지네이션을 넣어서 생성 하고 싶으시다면

스타일만 맞추어 넣어주면 됩니다.

//모바일 제이쿼리 페이지 네이션 형식
<ul data-role="pagination">
 <li class="ui-pagination-prev"><a href="2.html">Prev</a></li>
 <li class="ui-pagination-next"><a href="4.html">Next</a></li>
</ul>

// 이라면


  $config['next_link'] = '다음';
  $config['next_tag_open'] = '<li class="ui-pagination-prev">';
  $config['next_tag_close'] = '</li>';
  
  $config['prev_link'] = '이전';
  $config['prev_tag_open'] = '<li class="ui-pagination-next">';
  $config['prev_tag_close'] = '</li>';  

$this->pagination->initialize($config);
$data['page_navi'] = $this->pagination->create_links(); 

//이런식으로 컨피그 한다음 뷰에서

<ul data-role="pagination"><?=$page_navi?><ul>


앙마 / 2013/05/23 12:49:27 / 추천 0
risa//

일단 해보긴 했는데 역시 네비가 나오질 안네요

혹시 저기 있는 <?=$page_navi?> alert로 찍으면 뭔가 나와야 하는 건가요??

아! 그리고 나오는 방법은 페이지네비를 이용해서 이동한 다음에 f5를 눌러야 나오던데;;

risa / 2013/05/23 13:33:14 / 추천 0
뜯어본지 오래되서  기억이 가물 한데

제이쿼리 모바일은 기본 베이스 설정에 페이지에 데이터를 담는..

즉 캐쉬 하는 부분이 있습니다.

페이지 접근시 캐쉬를 쌓거나 캐쉬를 불러와 먼저 보여주는 방식인데

F5로 인해서 캐쉬를 풀고 본래 내용을 보여주는게 아닌지 의심을 해봅니다.


alert 으로 찍었을때

<li class="ui-pagination-prev"> 값 </li>
....
<li class="ui-pagination-next"> 값 </li>

가 찍혀있습니다.

CI 페이지 네이션은

<a href="URL">데이터</a> 

이런 형태로만 찍습니다.

그앞에 태그로  <li > </li> 넣어준것 밖에 안됩니다.



앙마 / 2013/05/23 13:59:00 / 추천 0
 risa//

감사합니다 조금 여러가지를 찾다보니 살짝 의심되는 부분을 발견했는데요

function logincheck(){
 
$id = $this->input->post('user_id');
$pass = $this->input->post('user_pwd');
$id_chk = $this->input->post('id_chk');
$login_chk = $this->input->post('login_chk');
if($id == ''){

  }else{
   set_cookie('use', $id, 24 * 60 * 60);
  }
 
if($login_chk == 'on'){
set_cookie('cook_user_id', $id, 356 * 24 * 60 * 60);
set_cookie('cook_user_pass', $pass, 356 * 24 * 60 * 60);
set_cookie('cook_save_id', 'on', 356 * 24 * 60 * 60);
set_cookie('cook_save_login', 'on', 356 * 24 * 60 * 60);
}else if($login_chk == '' && $id_chk == 'on'){
set_cookie('cook_user_id', $id, 356 * 24 * 60 * 60);
set_cookie('cook_save_id', 'on', 356 * 24 * 60 * 60);
delete_cookie('cook_user_pass');
delete_cookie('cook_save_login');
}else if($login_chk == '' && $id_chk == ''){
delete_cookie('cook_user_pass');
delete_cookie('cook_user_id');
delete_cookie('cook_save_login');
delete_cookie('cook_save_id');
}
 
$success = $this->note_model->logincheck($id, $pass);
if($success != null){
header("location:/index.php/note/login");
}else{
$this->load->view('head');
$this->load->view('login');
$this->load->view('footer');
}
}
 
 
function login(){
 
$this->load->view('head');
$this->load->library('pagination');
 
$config['base_url']= '/index.php/note/login/';
$data['perPage']=$config['per_page']= 8;
$config['uri_segment'] = 4;
$data['pageNum']=$offset = $this->uri->segment(3,0);
$data['result']=$this->note_model->select_entry($data['perPage'], $offset);
$config['total_rows']=$this->note_model->q_list(get_cookie('use'));
$config['num_links'] = 4;
$config['page_query_string']=FALSE;
$this->pagination->initialize($config); 
$data['pagenav'] = $this->pagination->create_links();
 
$this->load->view('logincheck', $data);  
 
$this->load->view('footer');
} 
 


페이징을 했을 경우 페이지가 넘어가고 데이터도 잘 넘어오는데 문제는 페이징하는 번호가 계속 1번에 고정되네요

risa / 2013/05/23 15:01:26 / 추천 0
$config 가 잘못되었네요.

차분히 다시 생각 하면서 하나씩 값을 테스트 해보세요.

충분히 해결 하실수 있습니다.
앙마 / 2013/05/23 16:50:59 / 추천 0
 risa//

아ㅠㅠ uri_segment가 잘못된거였군요;; 저는 저것으로 읽어서 단지 페이지 이동만 시켜주는 줄 알았네요ㅠㅠ

고맙습니다

그런데 한 가지;;

페이징네비를              이전   현재페이지/마지막페이지쪽수    다음

이런식으로 바꾸려고 하거든요 이전 현재페이지 다음은 나오는데 마지막페이지쪽수는 어떤 방식으로

넣어야할지...

pagination.php에서 수정을 해보려했는데 에러만 발생하네요;; 직접 만들어야하나..