사이트 내 전체검색
그누보드
[팁] 검색시 공백문자 무시 검색하게.
로빈아빠
https://cmd.kr/gnu/109 URL이 복사되었습니다.

본문

Q: 던힐프로스트 
http://sir.co.kr/bbs/board.php?bo_table=g4_qa&wr_id=141854
http://www.poporu.co.kr/home/bbs/search.php?srows=10&sfl=wr_subject%7C%7Cwr_content&sop=and&gr_id=&stx=%C6%B2%B8%B0+%B1%D7%B8%B2+%C3%A3%B1%E2
제가 만들고있는 사이트 인데요
게시물 제목이 틀린그림 찾기 입니다.
검색을 틀린그림찾기 로 하면 나오는데요
틀린 그림 찾기 로 하면 안나와요;
띄어쓰기 네이버 같은데보면
그누보드 로 검색하던지 그누 보드 라고 검색하던지
띄어쓰기를 붙은글자로 인식하는건지 몰라두 둘다 검색결과가 나오는데요
그렇게 수정하려면 무슨파일을 어떻게 수정해야 하는지 혹시 아시는분 계신가요?


A: 로빈아빠
검색부분에서 space 처리하게 하였다,
속도문제상 제목에서만 처리하였고, 내용까지 하려면.
      if ($search_operator=="space") {  //&&$field[$k]=="wr_subject" 를 빼면된다.
구조상 검색단어만 색상이 바뀌게 되지는 않는다..
페이지 이동시에 문제가 될수도 있다..
" " 을 + 등으로 수정할 필요가 있다..

1. list.skin.php 검색부분수정
   <input type="radio" name="sop" value="and">and
   <input type="radio" name="sop" value="or">or
   <input type="radio" name="sop" value="space">공백무시

2. /lib/common.lib.php 에서
// 검색 구문을 얻는다.
//function get_sql_search($search_ca_name, $search_field, $search_text, $search_operator=false)
function get_sql_search($search_ca_name, $search_field, $search_text, $search_operator='and')
{
    global $g4;

    $str = "";

 $str = "";
 if ($g4[search_str]) $str=$g4[search_str];

    if ($search_ca_name) {
     if ($str) $str .= " and ";
        $str .= "ca_name = '$search_ca_name' ";
 }

    $search_text = trim($search_text);

    if (!$search_text)
        return $str;

    if ($str)
        $str .= " and ";

    // 쿼리의 속도를 높이기 위하여 ( ) 는 최소화 한다.
    $op1 = "";

    // 검색어를 구분자로 나눈다. 여기서는 공백
    $s = array();
 if ($search_operator="space") $s=array($search_text);   //공백무시 검색
 else $s = explode(" ", $search_text);

    // 검색필드를 구분자로 나눈다. 여기서는 +
    //$field = array();
    //$field = explode("||", trim($search_field));
    $tmp = array();
    $tmp = explode(",", trim($search_field));
    $field = explode("||", $tmp[0]);
    $not_comment = $tmp[1];

    $str .= "(";
    for ($i=0; $i<count($s); $i++) {
        // 검색어
        $search_str = trim($s[$i]);
        if ($search_str == "") continue;

        // 인기검색어
        $sql = " insert into $g4[popular_table] set pp_word = '$search_str', pp_date = '$g4[time_ymd]', pp_ip = '$_SERVER[REMOTE_ADDR]' ";
        sql_query($sql, FALSE);

        $str .= $op1;
        $str .= "(";

        $op2 = "";
        for ($k=0; $k<count($field); $k++) { // 필드의 수만큼 다중 필드 검색 가능 (필드1+필드2...)
            $str .= $op2;
     if (substr($field[$k],0,4)=="inx_") {
   $str .= " ".substr($field[$k],4). "= '$s[$i]' ";
     }
     else {
    switch ($field[$k]) {
     case "mb_id" :
     case "wr_name" :
      $str .= " $field[$k] = '$s[$i]' ";
      break;
     case "wr_hit" :
     case "wr_good" :
     case "wr_nogood" :
      $str .= " $field[$k] >= '$s[$i]' ";
      break;
     // 번호는 해당 검색어에 -1 을 곱함
     case "wr_num" :
      $str .= "$field[$k] = ".((-1)*$s[$i]);
      break;
     // LIKE 보다 INSTR 속도가 빠름
     default :
      echo $search_operator;
      if ($search_operator=="space"&&$field[$k]=="wr_subject") {
       $search_str2=str_replace(" ","",$search_str);
       if (preg_match("/[a-zA-Z]/", $search_str))
        $str .= "INSTR(LOWER(REPLACE($field[$k],' ','')), LOWER('$search_str2'))";
       else
        $str .= "INSTR(REPLACE($field[$k],' ',''), '$search_str2')";
      }
      else {
       if (preg_match("/[a-zA-Z]/", $search_str))
        $str .= "INSTR(LOWER($field[$k]), LOWER('$search_str'))";
       else
        $str .= "INSTR($field[$k], '$search_str')";
      }
      break;
    }
     }
            $op2 = " or ";
        }
        $str .= ")";

        //$op1 = ($search_operator) ? ' and ' : ' or ';
        $op1 = " $search_operator ";
    }
    $str .= " ) ";
    if ($not_comment)
        $str .= " and wr_is_comment = '0' ";
    return $str;
}

 

댓글목록

등록된 댓글이 없습니다.

그누보드
190 (1/4P)

Search

Copyright © Cmd 명령어 18.219.218.186