CI 묻고 답하기

제목 post 방식으로 페이지네이션 관련 질문 좀 드립니다~
글쓴이 타고난눈빛 작성시각 2012/02/20 14:24:52
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 23770   RSS
안녕하세요 CI를 처음 접하는 초보개발자 입니다.

포럼 소스와 메뉴얼 대로 게시판 페이지네이션을 구현해 보았는데요

제가 검색 능력이 부족한 건지 페이징 기법이 세그먼트 확인해서 사용하는 방식뿐이 더 군요.

혹시 url에 쿼리스트링이나 세그먼트 안보이게 사용하는 방법이 있나요?? 그러니까 일반 php에서 post 방식으로 넘기면
url 변화 없이 페이징 되는 것이요.

글쓰기 같은 input인 형태는 CI에서 post 방식으로 기능이 있는데 페이지네이션은 몬가 막히네요

아직도 CI에 대해 긴가민가 한게 많네요 ㅠㅠ 

알려주시면 감사하겠습니다~^^
 다음글 utf-8 환경에서 euc-kr로 인코딩된 url을 받... (2)
 이전글 검색어 만들기 (1)

댓글

인스카 / 2012/02/20 14:41:52 / 추천 0
질문과 다른 내용이지만, 페이징이 변함에 따라 URL에 쿼리스트링으로 현재의 페이지가 표시되는 것이 좋다고 생각합니다.
특별히 현재 페이지의 URL을 숨겨야할 이유가 있을까요?
타고난눈빛 / 2012/02/20 15:20:47 / 추천 0
답변 감사합니다(__)

저도 그럴려고 하는데요.. 제가 결정권이 있으면.. 페이징은 당연히 쿼리스트링 방식이나 CI에선 세그먼트 방식을 적용 하겠지요... 하지만 윗분께서 일단 post 방식도 해보라고 하셔서요;;

제가 CI를 잘 몰라서 되는지 안되는 지도 잘 모르고 해서 일단 해보긴 해야할 것 같아서 하는 거에요 ㅠㅠ

안 된다면 안되는 이유를 말씀 드려야하니까요. ㅠㅠ
변종원(웅파) / 2012/02/20 15:25:55 / 추천 0
post로 넘긴 변수가 page라면 $this->input->post('page')라고 받아서 처리하시면 됩니다.

기존 pagination에서 $this->uri->segment(4) 대신에 위 구문을 쓰시면 됩니다.
공이 / 2012/02/20 16:04:38 / 추천 0
 post 방식이면 뒤로가기 시 만료된 페이지 문제도 있으실 텐데요...
조사장 / 2012/02/20 18:16:16 / 추천 0
CI에서 제공하는 pagination을 사용하셔서 post방식으로 넘기고자 하신다면, 

1. 게시판 목록을 조회하는 controller부분에 $this->input->post('파라메터명');로 post값을 받을 수 있게 하시구요
2. pagination을 만들어주는 라이브러리를 post방식에 맞게 수정을 해주시면 될거라 생각합니다.
* system/lib 소스를 수정하지 말고 {my_lib}로 등록하셔서 쓰세요.
(CI 메뉴얼 : 나만의 라이브러리 만들기( http://www.codeigniter-kr.org/user_guide_2.1.0/general/creating_libraries.html )
* 소스를 복사하셔서 사용하셔도 되겠구요. 상속받은다음에 create_links()부분만 재정의 하시면 되겠습니다.
*  {my_lib} 안에서 << < [1] [2] [3] ...[10] > >> 각각 여기에 링크달아주는 소스부분들을 파악하셔서 수정해주셔야 할꺼에요.
/* [CI Pagination Code]
a tag를 사용해서 도메인 뒤에 번호로 페이지를 호출하는 부분을..(밑에 계속)
 */
$output .= $this->first_tag_open.'<a href="'.$this->base_url.'">'.$this->first_link.'</a>'.$this->first_tag_close;

/* [수정 Code]
가칭 goPage라는 script.function을 만들어 호출하게 하고 post방식으로 해당 페이지를 호출하는 방법이면 어떨까 합니다.
 */
$output .= $this->first_tag_open.'<a style="cursor:pointer;" onclick="goPage( \''.$this->base_url.'\' );">'.$this->first_link.'</a>'.$this->first_tag_close;
3. 2번에 CI.paginiation lib에 수정한 goPage라는 스크립트 함수를 만들어주시면 해결?! 될거라 생각합니다 ㅎ

m(__)m;; 내용이 좀 뒤죽박죽이지요? ㅎㅎ;;
SEB / 2012/02/20 19:53:30 / 추천 0
궁금해서 그러는데요.. 어떤경우이길래 윗분께서 pagination을 post로 보내라고 하시는거죠?
얼핏 생각하기에는 단점밖에 없는것 같아서요..
뒤로가기가 안되는 UX문제도 있고, 접근성도 떨어지고 검색엔진에 crawling도 안될텐데요..
만들려면 윗분 말씀대로 pagination클래스 확장하여 구현은 가능하겠지만,
상사분께 굳이 post를 쓰시려는 의도가 뭔지 한번 물어보시는게 좋을듯 하네요 ㅎ
타로 / 2012/02/21 01:21:33 / 추천 0
페이징처리시에 URL을 숨기시려고 할 경우에 일반적으로 POST를 많이들 생각하시는데
질문자님도 그러신듯 하시네요.

질문의 요지가 페이징을 POST로 하는것이 목적이 아니라 단지 URL을 숨기려는 것이죠?

저도 예전에 같은 요청을 받은적이 있어서 SESSION으로 처리했답니다. POST로 할 경우
여러가지 고려해야할 것들이 상당히 많습니다.

serialize 함수를 이용하여 세션으로 처리하는 방법이 가장 깔끔했던 것으로 기억나네요.

SEB님께서 말씀하신부분처럼 상사분이 기필코 POST를 원한다면 의도가 정말 궁금... ^^