물어보기XpressEngine

통합검색해서 특정모듈을 대상으로 검색하게 하는 코드가 혹시 있을까요..

 

누리고 상품검색 통합검색의 경우 검색이..

http://eond.com/index.php?mid=shop&act=IS&is_keyword=검색어&where=product&page=1

이렇습니다.

 

통합검색에서 원하는 모듈을 대상으로만 검색 가능한 코드가 혹시 있을까요?

 

통합검색에서 특정 게시판만 검색하고 싶습니다.

https://www.xpressengine.com/qna/21907407

통합검색시 게시판 별로 볼 수 있도록 하는 방법 있나요 ?

https://www.xpressengine.com/index.php?mid=qna&search_target=title&search_keyword=통합검색&document_srl=23097691

통합검색 게시판별 설정 못하나요? 흠.. https://www.xpressengine.com/index.php?mid=qna&search_target=title&search_keyword=통합검색&page=2&document_srl=23068706

통합검색시 선택한 게시판 또는 페이지만 검색하도록 가능한가요?? https://www.xpressengine.com/index.php?mid=qna&search_target=title&search_keyword=통합검색&page=8&document_srl=19823993

통합검색시 지정모듈만 검색가능하게 설정하는 방법 https://www.xpressengine.com/index.php?mid=qna&search_target=title&search_keyword=통합검색&page=10&document_srl=18707879

 

몇년동안 질문만 있고 답변은 하나도 없군요 -_-;;

 


카르마님의 통합검색 확장모듈을 사용 중입니다.

통합검색확장모듈에서 원하는 특정 게시판만 대상으로 검색하게 수정하고 싶습니다.

해당 기능을 담당하는 클래스를 찾아서 switch나 옵션을 주면 된다는 소리를 들어서요. 

통합검색자체도 메서드라고 하더군요.

그래서 해당 메서드 입력값을 하나 더 주고 옵션으로 사용 가능하다고 합니다.

 

우선 해당 클래스를 찾아 해당 클래스 내의 메서드 중에서 검색에 해당하는 메서드의 입력 변수값을 하나 더 추가한 뒤에, 추가된 변수에 해당 게시판 코드를 담아서 실행하면 된다고 하는데요.

 

먼저 뷰단에서 통합검색 스킨의 form 구조에서 act가 IS 라고 되어있어서

isx.view.php 파일 에서 ISX라는 매서드를 찾았습니다.

해당 매서드 안에 $module_srl = Context::get('module_srl'); 이라는 변수를 임의로 추가해넣었습니다.

// 모듈아이디에 따른 검색 변수 추가
$module_srl = Context::get('module_srl');

// integration search model객체 생성
if($is_keyword)
{
   $oISx = &getModel('isx');
   $oIS = &getModel('integration_search');
   switch($where)
   {
      case 'document' :
         $search_target = Context::get('search_target');
         if(!in_array($search_target, array('title','content','title_content','tag'))) $search_target = 'title';
         Context::set('search_target', $search_target);

         $output = $oIS->getDocuments($target, $module_srl_list, $search_target, $is_keyword, $page, 10);
         Context::set('output', $output);
         $this->setTemplateFile("document", $page);
         break;

일단 변수를 추가하는 것 까진 진행했는데, 이 추가된 변수에 해당 게시판 코드를 담아서 실행하는 방법을 모르겠습니다.;

$is_keyword 모델 객체 안에 $where 안에 case 'document' 안에 $module_srl 을 집어넣으면 될거 같은데..

고수님들의 손길이 필요합니다. ㅠ


해당 모듈을 수정하고자 하는 기능은 다음과 같습니다만.. 

1. 특정게시판 지정 검색기능

2. 특정검색어는 검색기록에서 제외하는 기능

3. 특정아이피 대역은 검색 기록에서 제외하는 기능

4. 로봇은 검색 기록에서 제외하는 기능

5. 검색목록에서 체크박스를 이용해서 선택 삭제하는 기능

 

처음부터 막혔네요 ㅠ

  • ?
    카르마 2017.09.25 08:53:55

    한꺼번에 다섯개의 질문을 동시에 하신 건가요?
    2,3,4번은 기존 XE의 기능을 조금씩 확장하면 가능할 것같습니다.
    다섯번째 문제는 저도 익히 알고 있고 건의도 많았지만 노가다가 귀찮아서 쌩까고 있는 중입니다.
    누구 능력되시는 분이 추가해주시면 고맙겠습니다.

    첫번째 질문의 답도 의외로 간단합니다.
    제 사이트에서 검색을 해보시면 아시겠지만 식물도감을 검색하는 부분이 있고 식물정보를 검색하는 부분이 있습니다.
    예를 들어 식물정보를 검색하는 부분의 소스는 다음과 같습니다.

    case 'term' :
    $search_target = Context::get('search_target');
    if(!in_array($search_target, array('title','content','title_content'))) $search_target = 'title_content';
    Context::set('search_target', $search_target);
    $term_srl = "289567,267";
    $output = $oIS->getDocuments('', $term_srl, $search_target, $is_keyword, $page, 10);
    Context::set('output', $output);
    $this->setTemplateFile("term", $page);
    break;

     

    기존 integration_search.model에 들어있는  getDocuments($target, $module_srls_list, $search_target, $search_keyword, $page=1, $list_count = 20) 에서 $module_srls_list에 특정 모듈은 지정해주면 해당 모듈에서만 검색이 이루어집니다.
    &where=term 으로 검색하시면 해당 모듈에서만 검색이 가능합니다.

  • profile
    이온디 2017.09.25 11:35:09
    @카르마님 감사합니다.
    개발에 대한 열의는 있는데 제 머리가 그만큼 안 따라와줘서 고생입니다.
    저는 term 에 대한 별도의 변수 정의 같은게 필요한 줄 알았는데 필요가 없는 것이었군요.
    단순히 where 스위치 구문 아래에 term 일 경우에 대해서만 정의를 해주면 됐었군요.

    case 'term' : // where=term 일 경우에
    $search_target = Content::get('search_target'); // search_target 범위
    if(..) $search_target = 'title_content'; // search_target은 기본으로 title_content를 대상으로 한다.
    Context::set('search_target', $search_target); // search_target 대상정의
    $term_srl = "363909"; // 모듈 srl 넘버
    $output = $oIS->getDocuments('', $term_srl, $search_target, $is_keyword, $page, 10); // 출력은 = 문서를 가져오는데, $term_srl 을 기준으로, search_target 을 대상으로 하고, $is_keyword를 검색한다, $page는 10개로 나눠서 검색된 결과값을 출력한다.
    Context::set('output', $output); //output 정의
    $this->setTemplateFile("document", $page); // 이것을 document라는 파일명에 출력한다.

    1번 해결했습니다.
    카르마님께서는 $term_srl을 두개로 설정하셨고, 이를 term,html 이라는 문서에 출력하도록 만드신 거군요.

    2,3,4번은 도무지 엄두가 안나네요.
    5번은 끄적여보고 있습니다만... 체크박스는 만들었는데 삭제버튼과 연동이 어렵네요. ㅎㅎ;

서버에 요청 중입니다. 잠시만 기다려 주십시오...