CI 묻고 답하기

제목 또 질문입니다. 페이지네이션 ㅠㅠ
글쓴이 appo 작성시각 2015/07/19 01:52:58
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 15812   RSS
책을 다시 읽고 포럼 게시판 검색하고 2.1.0 설명을 다시 보고...
페이지네이션 한시간정도 걸려서 적용했는데

뷰1 뷰2 뷰3 뷰4 이렇게 있다면
라이브러리를 컨트롤러 처음에 불러오고
뷰1은 페이지네이션이 필요없고 2,3,4만 필요하다면 어떡하나요?

지금 전체목록 받아오는 끝에 LIMIT -20, 20 이런게 붙는데
$limit_query = ' LIMIT '.$offset.', '.$limit;
이렇게 리미트를 거는데 -20 오프셋이 다른 뷰 링크를 클릭해도 걸리네요...
전혀 상관없는 페이지를 눌러도 저렇게 뜨는 경우가 생기는데
조언 부탁드립니다.
십년전에 오라클이랑 이것저것 잠깐 배우다가 만드려니 정말 어렵네요.
 다음글 ci framework 책으로 공부 중입니다. (4)
 이전글 http와 https 세션 공유 문제 (1)

댓글

변종원(웅파) / 2015/07/20 10:44:39 / 추천 0
페이지네이션 적용하고 나면 주소에 페이지가 붙어서 이동이 됩니다.
그 페이지변수가 1일 때 뷰에서 if문으로 노출안하시면 됩니다.

$offset이 마이너스 값이 나올 수 없습니다. 해당부분 어떻게 작업하셨는지 소스를 올려주세요.

0, 20
20,20
40,20
이렇게 값이 올라갑니다. 20개씩 가져오는 로직입니다.
appo / 2015/07/20 17:41:04 / 추천 0
컨트롤

function lom()
 {
$config['base_url']='/index.php/Board/lom';
$config['total_rows'] = $this->Ad_m->lo('count');
$config['per_page'] = 20;
$config['uri_segment']=3;
$this->pagination->initialize($config);
$data['pagination'] = $this->pagination->create_links();
$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['llist'] = $this->Ad_m->get_list();
$data['lolist'] = $this->Ad_m->lo('', $start, $limit);
$this->load->view('lo_v',$data);
}

모델
function lo($type='', $offset='', $limit='')
{
  $limit_query='';
  if ($limit != '' OR $offset != '')
  {
  $limit_query = ' LIMIT '.$offset.', '.$limit;
  }
  $sql = "select ad.name as ad_name, user.name as user_name from lo".$limit_query;
  $query = $this->db->query($sql);
  if ($type == 'count')
  {
  $result = $query->num_rows();
  }
  else
  {
  $result = $query->result();
  }
 return $result;
}

뷰에서 foreach로 깎으면서 뿌려주는데 테이블 안에서 만약 값이 있을 경우 그림파일을 가져오게 했는데 이거 때문일까요?ㅠㅠ
헤더 부분에 메뉴를 만들어서 이동하면 그렇게 되는건지...
위 내용에 어딜 빼먹은걸까요?ㅠㅠ
변종원(웅파) / 2015/07/20 19:04:32 / 추천 0
컨트롤러 안에서 echo $page; 해보세요. 숫자가 나와야 합니다. 
주소에서 세번째 세그먼트가 페이지변수가 맞는지도 체크해보시구요
appo / 2015/07/20 20:25:16 / 추천 0
처음 1로 나오고 20, 40 제대로 들어가고 페이지변수를 2,3,4,5까지 여러가지로 변환해도 3번이 맞는거 같은데요
확인하니 a href로 다른 컨트롤러 메소드로 가는 경우 그게 페이지로 들어가버리네요...
echo $page 값이 밑에 서브메뉴 aa 이걸로 들어가버립니다.
제가 메뉴 밑에 서브메뉴를 넣었는데
메뉴 a href="#" data-target="#aa" 
서브메뉴 id="#aa" 이렇게 메뉴 누르면 서브메뉴 나오게 했는데
이거때문인가싶기도하구요...
숫자가 아닌게 들어가서 -20으로 들어가는거 같은데
application/index.php/Board<-컨트롤러(todo같이 만들지는 않고 그냥 그대로 씁니다.) lom<-메소드 이니까
인덱스0 Board 1 lom 2 페이지가 3 아닌가요?
2,1 3,1 4,1 5,1 2,2 이런식으로 바꿔도 똑같네요.

 
변종원(웅파) / 2015/07/21 07:47:44 / 추천 0
우선 주소 세그먼트 방식에서는 페이징변수는 항상 같은 위치에 존재해야 합니다.

만약 컨트롤러마다 페이징변수의 위치가 틀리다면 그걸 소스에 반영해줘야합니다. 

a.com/cont/method/1 -> $page = $this->uri->segment(3, 1);

a.com/dir/cont/method/1 -> $page = $this->uri->segment(4, 1);
 
변종원(웅파) / 2015/07/21 07:50:48 / 추천 0
이 방식이 싫으시면 매뉴얼에서 $this->uri->uri_to_assoc(n) 을 참고해서 작업할 수 있는데
변수의 위치를 알려줘야 하는 것은 동일합니다.
 
appo / 2015/07/23 18:21:35 / 추천 0
답변 감사드립니다. 페이징변수는 다 같게 고쳤고 컨트롤러마다 다 넣어놓을게요.