제목 | pagination 작업 하는데 페이지 이동이 안됩니다. | ||
---|---|---|---|
글쓴이 | 나잇황제 | 작성시각 | 2009/09/30 00:09:19 |
|
|||
게시판에 아이디를 부여해서 여러개의 게시판을 만들수 있는 게시판을 만들고 있습니다. $board_skin = $board_config_row['bd_skin']; //게시판 정보 |
|||
다음글 | 동일 도메인 내 서로 다른 포트의 웹서버 쿠키 및 세션... (4) | ||
이전글 | php 출력 문의 사항~ (3) | ||
변종원(웅파)
/
2009/09/30 00:18:16 /
추천
0
|
ci세상
/
2009/09/30 01:05:19 /
추천
0
모델을 봐야 정확히 알수 있을것 같은데요 limit와 offset이 반대로 된듯 보입니다.
http://codeigniter-kr.org/user_guide/database/active_record.html $query = $this->db->get('mytable', 10, 20); // 생성결과: SELECT * FROM mytable LIMIT 20, 10 (in MySQL. Other databases have slightly different syntax) |
나잇황제
/
2009/09/30 01:08:10 /
추천
0
답변 주셔서 감사합니다.
웅파님 말씀대로 계속 같은 값이 출력되고 있는 듯 합니다. 값을 불러오는 모델이 아래와 같습니다. function get_board_total_list($board_uid, $limit, $offset) { $this->db->limit($limit, $offset); $this->db->where('bd_uid', $board_uid); $this->db->join('bd_contents', 'bd_list.lst_uid=bd_contents.lst_uid'); $this->db->orderby('bd_list.lst_head_num'); $result=$this->db->get('bd_list'); return $result->result(); } CI세상님 LIMIT 와 OFFSET 순서는 맞는듯 한데.. 틀린겁니까? |
변종원(웅파)
/
2009/09/30 10:05:04 /
추천
0
echo $offset; 해보시면 옵셋값이 변하지않을 겁니다.
아래 라인 추가해주세요. $config['uri_segment'] = 3; $page=$offset = $this->uri->segment(3, 0); //페이지 이동에 따라 오프셋 값이 변화를 해야 그에 맞는 데이터를 가져옵니다. |
ci세상
/
2009/09/30 11:22:53 /
추천
0
1.7.2 버젼이라면 아래 부분도 한번 시도해 보세요^^
system/database/DB_active_rec.php 1605줄 if (is_numeric($this->ar_limit) && is_numeric($this->ar_offset)) { $sql .= "\n"; $sql = $this->_limit($sql, $this->ar_limit, $this->ar_offset); } 출처 : http://codeigniter.com/forums/viewthread/129405/ |
나잇황제
/
2009/09/30 12:27:53 /
추천
0
먼저 웅파님 ci세상님 이렇게 답변해주셔서 감사합니다.
제가 $offset 을 찍어본 결과 값은 잘 넘어오거든요. 페이징처리가 되어 게시물이 변경되기는 하나 5개씩가지 않고 하나씩 올라가네요. 사이트 보시면 확인이 가능할겁니다. 이 방법도 해봤었는데 그런 오류가 나서 일단 uri->segment 를 주석처리했었거든요. ci세상님 버전이 1.7.2가 아닌가 봅니다. 아마도 1.7.0이지 않을까... 그파일에 가서 1605번째 라인에 보았는데.. 다른 코딩이 있더군요. 아.. 안될 이유가 없는데.. 참 답답하네요.ㅠㅠ |
변종원(웅파)
/
2009/09/30 12:43:02 /
추천
0
지금 확인해보니 값이 제대로 바뀌네요.
어떤 처리하셨는 궁금.. ^^ |
나잇황제
/
2009/09/30 12:56:17 /
추천
0
바뀌나요?? 안바뀔텐데..
보면.. 값이 바뀌긴 하는데... 원래 5개씩 바뀌어야 되는게.. 지금 하나씩만 위로 올라가고 있는 형국입니다. 예를들어... 1페이지에 게시글 11, 10, 9, 8, 7 이렇게 있으면 2페이지에는 10, 9, 8, 7, 6 이런식으로 나오고 있습니다. 저도 왜그런지 도무지 이해가 안가네요... $offset은 제대로 넘어가는데... |
나잇황제
/
2009/09/30 13:06:26 /
추천
0
웅파님... CI 말고 일반적으로 프로그램 할때 limt 20, 10 이면, 20번부터 10개를 가져오는거잖아요..
그렇게 해서... 20번을 구해주는 연산을 만들고요.. 근데 CI는 $offset 만 넘겨주면 자동으로 값을 만들어 주는건가요?? board_model에 들어오는 값을 확인해보니, $limit =5, $offset은 0, 2, 3, 4 이런식으로 들어오고 있거든요.. 그래서.. 2페이지에는 2번부터 5개, 3페이지에는 3번부터 5개, 이런식으로 값이 표현이 됩니다. |
나잇황제
/
2009/09/30 13:20:52 /
추천
0
웅파님... 일단은 편법으로 해결은 했는데 이게 맞는지 모르겠네요...
아래와 같이 $offset 이 0일때는 1로 셋팅해주고, 아닐때는 저런식으로 계산을 해서 시작점을 맞춰주고 있습니다. if( $offset == 0 ) { $offset =1; } $offset = ($offset-1)*$limit; 이건 그냥 날코딩할때와 별반 다를게 없는것 같은데... 이게 맞는지 모르겠네요... 이렇게 하면 문제는 해결이 되긴 하는데... |
변종원(웅파)
/
2009/09/30 14:27:56 /
추천
0
CI 원본으로 작업하셨는지요?
CI 원본이라면 페이징주소가 lists/1/10, lists/1/20 이런식으로 변할텐데요? 그리고 맨뒷쪽의 페이지 부분은 pagination 프로그램에서 자동으로 만들어주는 부분입니다. 그리고 전에 $config['uri_segment'] 부분을 선언안하셨을때 이상하게 나오는 것은 디폴트값이 3으로 되어있어서 입니다. /board/lists/1/1 이면 항상 첫번째 1을 페이징변수로 생각해서 원하는 결과가 안나온 것입니다. $config['uri_segment'] <- 페이징변수가 들어가는 세그먼트 번호를 넣어줘야합니다. |
변종원(웅파)
/
2009/09/30 14:28:45 /
추천
0
보통 기본적으로 사용하는 페이지네이션 셋입니다.
$config['base_url']=site_url('directory/prog/index/'.$gubun.'/'); //페이징처리 링크주소 $config['uri_segment'] = 5; $data['perPage']=$config['per_page']='10'; //페이지당 리스트 노출갯수 $page=$offset = $this->uri->segment(5, 0); $data['dir_info']=$this->dir_model->dir_list($gubun, $data['class1'], $data['class2'], $data['s_word'], $offset, $data['perPage']); //리스트 가져오기 $data['getTotalData']=$config['total_rows']=$this->dir_model->dir_cnt($gubun,$data['class1'], $data['class2'], $this->input->post('s_word')); $config['page_query_string']=FALSE; // 두가지 주소체계를 동시에 사용할 경우 선언해줘야합니다. $this->pagination->initialize($config); $data['pagenav'] = $this->pagination->create_links(); $this->load->view('directory/main', $data); |
ci세상
/
2009/10/01 09:00:25 /
추천
0
페이지네이션 번호체계가 틀린것을 보니 라이브러리를 변경하시거나 확장하신듯 보입니다.^^
matchbox 적용을 안하셨으면 application 폴더를 압축해서 올려주세요 수정해서 드리겠습니다. |
나잇황제
/
2009/10/06 14:30:13 /
추천
0
ci님 너무 감사합니다. 제가 1.7.2 버전으로 다시 다 옮기고 있으니 거기서 해보고 안되면 부탁드리도록 하겠습니다. |
해서 값이 바뀌는지 확인바랍니다.
말씀하신 주소 들어가보니 페이징은 처리가 되는데 $this->board_model->get_board_total_list($board_uid, $limit, $offset); 이 부분이 제대로 값이 처리가 안되는 것 같습니다.