제목 | 게시판에 다중 검색 조건을 넣고 싶은 경우 | ||
---|---|---|---|
글쓴이 | 비바람 | 작성시각 | 2014/03/20 18:47:35 |
|
|||
안녕하세요. Codeigniter 초보 입니다. '배우면서 만드는...' 책을 구매하여 참고하면서 개발을 하고 있는데요 아래 코드와 같이 검색어를 입력하면 url을 parsing하여 검색 결과를 돌려주게되어 있는데 한 단어 검색에서는 아래의 방법이 좋은것 같습니다. if( in_array('q', $uri_array)){
$search_word = urldecode($this->url_explode($uri_array, 'q'));
$page_url = '/q/'.$search_word;
$uri_segment = 7;
} 그런데 검색 조건이 여러개 일때... 예를 들어 날짜나 특정 조건들이 들어가서 3~4가지의 조건을 검색에 반영할때는 어떻게 하는것이 좋은지 몰라 문의 드립니다. 예를들어 "2014년 1월 부터 5월까지의 게시물 중 "코드이그나이터"라는 단어가 들어가고 "code"라는 유저가 작성한 게시물"을 검색한다고 할 때 관련된 값들을 url로 넘기는 것은 비효율적일 것 같은데요 _GET이나 _POST를 병행해서 써야되는지 아니면 오브젝트 등으로 넘길 수 없는지 궁금 합니다. 감사합니다. |
|||
다음글 | p87질문입니다. (5) | ||
이전글 | 그림4-1결과화면에서 한글이 전부 깨져서 나오네여. (6) | ||
변종원(웅파)
/
2014/03/20 18:53:50 /
추천
0
|
timothy
/
2014/04/16 00:42:54 /
추천
0
컨트롤러에 get방식으로 넘기고, 컨트롤러에서 segment_explode함수로 배열을 받아, in_array함수로 'q'라고 검색어를 찾듯이,
세그먼트를 추가하여 if문으로 특정 조건의 검색어를 받습니다. 이때에는 페이지네이션 설정과 관련된 추가작업이 발생합니다. 또는 아시겠지만, 검색어를 파싱하는 방법이 있는데요. 아스키코드 중 D와 닮은 값'Ð'이 있습니다. (저는 이클립스 PDT를 쓰지만, 요 때에는 에디트플러스 참조)검색어로 사용가능성이 낮은 구분자를 통해, 파싱해서 사용하실 수도 있습니다. 모델에 넘길 때에는 배열로 넘깁니다. |
timothy
/
2014/04/16 15:36:17 /
추천
0
컨트롤러: lists()멤버 함수에서
검색어가 있는 경우에 따라서... if( in_array('q', $uri_array)){ $search_word = urldecode($this->url_explode($uri_array, 'q')); } if( in_array('kword', $uri_array)){ $kword = urldecode($this->url_explode($uri_array, 'kword')); } if( in_array('sword', $uri_array)){ $sword = urldecode($this->url_explode($uri_array, 'sword')); } 위와 같이 처리를 하고 각각의 if안에 flag를 체크하여, 세 가지 경우에 따라 페이지네이션 처리에 사용할 $page_url, $uri_segment을 값을 조정합니다. 예를 들어 세 개의 조건을 모두 만족한다면, 아래와 같이 처리가 될 것입니다. $page_url = '/q/'.$search_word.'/kword/'.$kword.'/sword/'.$sword; $uri_segment = 10; // 검색어 세그먼트 수에 따라 값 변경 모델의 get_list()를 통해 위의 검색어들에 해당하는 인자 값을 넘깁니다. $this->board_m->get_list('테이블명', 'count', '', '', $search_word, $kword, $sword); 모델: 인자로 넘겨받은 값이 유효한지 체크를 한 뒤, 쿼리에 이용합니다. 모델에 넘길 때, 아래처럼, post된 값을 배열에 담아서 넘길 수도 있습니다. 예를 들어, 컨트롤러: // 배열에 담기 $ary_sword = array( 'tbl' => '테이블명', 'cnt'=>'count', ... 'num' => $this->input->post('num', TRUE), // 게시물 번호 'search_word' => $this->input->post('search_word', TRUE), 'kword' => $this->input->post('kword', TRUE), 'sword' => $this->input->post('sword', TRUE) ); // 모델에 배열 넘기기 $this->event_m->edtEvent($ary_sword); 모델: /** * 이벤트 수정 * @param array $data DB에 업데이트할 내용 * @return DB결과 */ function edtEvent($data){ // $data 유효성 체크... // 값 사용 $result = $this->db->update($data['tbl'], ......); return $result; }위와 같은 예로 배열을 통해 처리하실 수도 있습니다. 저의 경우, POST나 GET방식 모두 사용하는데요. POST로 받으면 이를 배열로 담아서 모델에 넘겼습니다. GET방식으로 받으면 url_explode을 통해 처리를 했습니다. |
timothy
/
2014/04/16 15:53:00 /
추천
0
만일 쿼리스트링으로 작업을 하신다면,
config/config.php의 $config['enable_query_strings'] = FALSE; 값을 변경하시면 됩니다. |
a.com/controller/method/?a=1&b=2&c=3 형태로요.
책에서 부록 config.php 부분 보시면 주소 관련된 셋팅이 있습니다. 참고하세요.