묻고답하기
검색결과 내에서만 이전,다음 사용하는 방법
2008.06.03 01:45
일단 이전,다음 기능을 제로보드XE에서 쓸 수가 있게 됐는데요
검색을 하면 검색결과 내에서 이전, 다음이 가능하게 하고 싶습니다....
현재는 검색과는 상관없이 무조건 그냥 이전글과 다음글을 보여주거든요...
님께 여쭤봤더니
modules/document/document.model.php 파일에서
getDocumentList 함수를 찾아보세요... 거기에 // 검색 옵션 정리 이 부분을
그대로 가져와서 써야 합니다.
당연히 거기에 $output = executeQuery("document.getDocumentList", $division_args);
라고 있는데요 modules/document/queries/getDocumentList.xml 파일에 나오는데로
제가 만든 쿼리가 바뀌어야 하죵...
이렇게 답변해주셨는데요
(뒤에 쿼리를 바꾼다는 것은... 이해를 할 것도 같고... 해서 일단 급하지는 않고요...)
검색 옵션 정리 부분은 아래요...
// 검색 옵션 정리
$search_target = $obj->search_target;
$search_keyword = $obj->search_keyword;
if($search_target && $search_keyword) {
switch($search_target) {
case 'title' :
case 'content' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->{"s_".$search_target} = $search_keyword;
$use_division = true;
break;
case 'title_content' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->s_title = $search_keyword;
$args->s_content = $search_keyword;
$use_division = true;
break;
case 'user_id' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->s_user_id = $search_keyword;
$args->sort_index = 'documents.'.$args->sort_index;
break;
case 'user_name' :
case 'nick_name' :
case 'email_address' :
case 'homepage' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->{"s_".$search_target} = $search_keyword;
break;
case 'is_notice' :
case 'is_secret' :
if($search_keyword=='Y') $args->{"s_".$search_target} = 'Y';
else $args->{"s_".$search_target} = '';
break;
case 'member_srl' :
case 'readed_count' :
case 'voted_count' :
case 'comment_count' :
case 'trackback_count' :
case 'uploaded_count' :
$args->{"s_".$search_target} = (int)$search_keyword;
break;
case 'regdate' :
case 'last_update' :
case 'ipaddress' :
$args->{"s_".$search_target} = $search_keyword;
break;
case 'comment' :
$args->s_comment = $search_keyword;
$query_id = 'document.getDocumentListWithinComment';
$use_division = true;
break;
case 'tag' :
$args->s_tags = str_replace(' ','%',$search_keyword);
$query_id = 'document.getDocumentListWithinTag';
break;
default :
preg_match('/^extra_vars([0-9]+)$/',$search_target,$matches);
if($matches[1]) {
$args->{"s_extra_vars".$matches[1]} = $search_keyword;
$use_division = true;
}
break;
}
}
/**
그리고 이전 다음 글을 출력하는 함수는 아래요...
function getDocumentDivision($document_srl,$type,$order){
$oDocumentModel = &getModel('document');
$oDocument = $oDocumentModel->getDocument($document_srl, '');
$args->module_srl = $oDocument->get('module_srl');
if($order == 'list_order') {
$args->list_order = $oDocument->get('list_order');
$args->sort_index = '+
'+
'list_order';
} elseif($order == 'update_order') {
$args->update_order = $oDocument->get('update_order');
$args->sort_index = 'update_order';
}
if($type == 'next' || $type == 'next2') $args->order_type = 'desc';
elseif($type == 'prev' || $type == 'prev2') $args->order_type = 'asc';
if($type == 'next2' || $type == 'prev2') $args->list_count = 2;
elseif($type == 'next' || $type == 'prev') $args->list_count = 1;
$args->page_count = 1;
$args->page = 1;
if($type == 'next2' || $type == 'next') $output = executeQuery("document.getNextDivision", $args);
elseif($type == 'prev' || $type == 'prev2') $output = executeQuery("document.getPrevDivision", $args);
if($output->data) {
$data = array_pop($output->data);
$division_document->document_srl = $data->document_srl;
$division_document->title = $data->title;
$division_document->nick_name = $data->nick_name;
$division_document->comment_count = $data->comment_count;
$division_document->module_srl = $data->module_srl;
$division_document->object = $oDocumentModel->getDocument($data->document_srl);
}
return $division_document;
}
검색결과를 이전,다음 출력하는 함수에 그대로 가져와서 쓰는 방법을 알고싶습니다.
설명을 해도 제가 워낙 초보라서 그러는데요
(php책 이제 막 보기 시작했어요... 이전 다음기능 구현하고 싶어서... 그런데 초급인 저로써는 넘 어렵네요)
알기 쉽게 설명좀요 ^^; (대충이라도 어떤 코드를 어디쯤에 넣어야 하는것좀;;)