CI 묻고 답하기

제목 염치없지만 페이징 관련하여 또 질문드립니다..
카테고리 일반
글쓴이 창쓰 작성시각 2017/08/04 15:04:28
댓글 : 14 추천 : 0 스크랩 : 0 조회수 : 621   RSS

질문 올린지 얼마 되지않았는데, 또 질문을 올리게 되서 정말 죄송합니다..

여러 시도를 해보고,

코드이그나이터 한국포럼에도 찾아보고

밑에 있는 링크를 참고하였고, 구글링도 해보고, 코드이그나이터 프레임워크 책도 참고하였지만..

도저히 해결방안이 나오지않아 또 한번 이렇게 질문을 드립니다.

 

현재 문제점---------

컨트롤러에 문제가 있다고 생각하여,

컨트롤러의 소스를 첨부합니다.

	public function lists(){
		$this->load->view('head');
		$this->load->model('write_model');
		$this->load->helper(array('url','HTML'));
		$this->load->library('pagination');
		//페이지네이션 설정
		$config['base_url'] = '/index.php/write/lists';//페이징주소 
		$config['total_rows'] = $this -> write_model -> get_list($this -> uri -> segment(3), 'count');//게시물전체개수
		$config['per_page'] = 10; //한페이지에 표시할 게시물수
		$config['uri_segment'] = 5; //페이지 번호가 위치한세그먼트 "이 부분이 정말 이해가 안감"
		$this -> pagination -> initialize($config);//페이지네이션 초기화
		$data['pagination'] = $this -> pagination -> create_links(); //페이지링크를 view에서 사용할 변수로 할당

		//게시판 목록을 불러오기위한 offset,limit 값 가져오기
		$page = $this -> uri -> segment(5, 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 -> write_model -> get_list($this -> uri -> segment(3), '', $start, $limit);
    $this->load->view('/lists', $data);
		$this->load->view('footer');
	}

 

혹시몰라 모델 소스도 첨부합니다.

   function get_list($table = 'bookingdb', $type = '', $offset = '', $limit = '') {
         $limit_query = '';

         if ($limit != '' OR $offset != '') {
             // 페이징이 있을 경우 처리
             $limit_query = ' LIMIT ' . $offset . ', ' . $limit;
         }

         $sql = "SELECT * FROM bookingdb ORDER BY id DESC " . $limit_query;
         $query = $this -> db -> query($sql);

         if ($type == 'count') {
             $result = $query -> num_rows();
         } else {
             $result = $query -> result();
         }

         return $result;
     }

 

너무 잦은 질문에 불쾌감을 주었다면 정말로 선배님들께 죄송합니다.

문과생 출신으로, 개발을 하고 싶어 열심히 배우고 싶습니다.

답변 달아주시는 선배님들의 은혜를 잊지않고,

꼭 전문가가 되어, 새로 시작하시는 분들에게 도움이 될수있도록 하겠습니다.

 다음글 csrf ajax사용시 403 (forbidden) e... (1)
 이전글 페이지네이션 작업중 오류 (8)

댓글

배강민 / 2017/08/04 15:29:32 / 추천 0

http://www.codeigniter-kr.org/bbs/view/qna?idx=18290&page=2&view_category=&lists_style= 와 동일한 문제로 보이네요.

$config['uri_segment'] = 5; //페이지 번호가 위치한세그먼트 "이 부분이 정말 이해가 안감"

여기에 3이 들어가야합니다.

창쓰 / 2017/08/04 15:34:21 / 추천 0
@배강민 저도 해당 게시글보고 3을 넣고 시도하였지만, 페이지는 넘어가지만, 테이블이 안바뀌네요ㅠ ㅠㅠ
창쓰 / 2017/08/04 15:36:47 / 추천 0

 

배강민 / 2017/08/04 15:38:57 / 추천 0

흠 근데 다른부분도 좀 이상하네요.

모델 메서드가 function get_list($table = 'bookingdb', $type = '', $offset = '', $limit = '') { 인데

$table 자리에 $this -> uri -> segment(3)를 인수로 사용하셔서 이상하다 봤는데, $table을 사용하지 않으셔서 문제는 없어 보이긴한데,

나중에 수정하시려는건지 모르겠지만, 테이블명을 받아서 사용하시려는듯하긴한데, 현재이 코드상으로는 이상하긴하네요.

창쓰 / 2017/08/04 15:44:00 / 추천 0

@배강민 넵넵~ 맞습니다. 제가 $table을 넣어서 sql에 넣었는데, 테이블을 못 읽더라구요 ㅠㅠ 그래서 임시로 직접 입력해놨습니다 ㅠㅠ

정말로 어렵군요 ㅠㅠㅠ  일단는 @이강민 선배님말씀처럼 모델 부분 수정을 좀 해봐야할 것 같네요.ㅠㅠ 감사합니다 ㅠ

창쓰 / 2017/08/04 15:54:49 / 추천 0

아이고 해결이 안되네요 ㅠㅠ

model 부분에서 $sql = "SELECT * FROM " .table. " ORDER BY id DESC " . $limit_query; 을 넣으면,

테이블명을 읽어오지를 못해서.. booking db라고 넣어줬습니다.

너무 어렵네요..ㅎㅎ 컨트롤러 문제인것같은데.. 하단의 숫자를 누르면 url은 잘 바뀌는데,

테이블 내용들이 안 바뀌는 문제가 있네염..ㅠㅠ 

/ 2017/08/04 17:01:05 / 추천 0
쿼리 출력해서 확인해보시면 답 나올겁니다.
배강민 / 2017/08/04 17:06:33 / 추천 0
$this -> uri -> segment(3) 여기에 테이블명이 받아지는게 맞긴맞나요?
뫄뫄잉뿌 / 2017/08/04 17:40:14 / 추천 0
오타,,,는 아니겠죠? $table
하늘치 / 2017/08/04 17:55:54 / 추천 0

url 주소가 아래처럼 이루어져 있다는 거죠?

처음 접속시 : 도메인/index.php/write/lists/
2페이지 클릭: 도메인/index.php/write/lists/10
3페이지 클릭: 도메인/index.php/write/lists/20


1. 컨트롤과 모델 소스를 보니, url 주소로부터 게시판 테이블명을 가져오려고 하신 듯 하네요.
하지만, url 에는 테이블명이 없군요. 그래서 에러가 발생했을 겁니다.


2. 일단, 보통 페이지를 클릭하면 페이지 번호가 url 에 적용됩니다. 뭐, 만들기 나름이긴 하지만요.

2페이지 클릭: 도메인/index.php/write/lists/2
3페이지 클릭: 도메인/index.php/write/lists/3
그러면, url 주소로부터 「$this -> uri -> segment(3)」을 통해서 2 또는 3이라는 페이지 숫자를 가져옵니다.


3. 만약 url 주소에 테이블명을 넣고, 페이지 주소를 명기하고자 한다면,
3페이지를 클릭했을 때 아래와 같은 주소가 만들어질껍니다.

도메인/index.php/write/bookingdb/lists/3

이번에는 테이블명이 들어가 있기 때문에, 페이지 숫자를 가져오려면

$page = $this -> uri -> segment(4,1) 라고 해야 합니다.
$config['uri_segment'] = 4; 라고 해야 하고요.


4. 그리고 컨트롤러에서

$start = (($page / $config['per_page'])) * $config['per_page'];

이런 소스가 있지요?

$start = ($page - 1) * $config['per_page'];

이렇게 바꿔주시면 됩니다.

 


이 외에도 이야기할 것들이 더 있습니다만, 한 번 해보시면 감이 잡히지 않을까 싶네요. ^^

 

아, 그리고..

배강민님이 말씀하신 부분 꼭 확인해보세요.

컨트롤러에서 모델 function 불러오는 부분 있죠?
$data['list'] = $this -> write_model -> get_list($this -> uri -> segment(3), '', $start, $limit);

그런데, 모델에서는
get_list($table = 'bookingdb', $type = '', $offset = '', $limit = '') {}


닉 님이 말씀하신 것도요.
$this->db->last_query();

 

창쓰 / 2017/08/06 13:59:35 / 추천 0

@배강민 @하늘치 @뫄뫄잉뿌님 다들 감사합니다 오류를 확인했습니다. 어디가 문제였냐면,

창쓰 / 2017/08/06 13:59:55 / 추천 0
$page $this -> uri -> segment(5, 1); 이부분이 문제였습니다~
창쓰 / 2017/08/06 14:00:11 / 추천 0
3,1 로 바꾸니 바로 적용되더라구요~ 감사합니다~ ㅎㅎ
창쓰 / 2017/08/06 14:05:48 / 추천 0

알고보면 엄청 쉬운건데... 이걸 8시간 9시간걸려서 해결했다니..ㅠㅠ

선배님들 도움이 아니였으면 해결하지못했을겁니다.

정말 감사합니다~ ㅎㅎ