강의 컨설팅 트레이닝 무료진단 무료책자 마케팅편지 마케팅정보공유 다이어리 서비스제휴 고객센터

간단한 sugest 기능
작성자 : 2 kkkkkkk
등록날짜 : 2009.02.16 20:40
3,574

=========================================================================

        <tr align=center bgcolor=white height=25>
            <td width=15% bgcolor='$_1_bgcolor'>차량정보</td>
            <td align='left' width=*>&nbsp;<input type='text' id='car_name' name='car_name'></td>
        </tr>

 

 

<!-- 차량정보 div -->
<script>
 function fnChangeLayerSize(obj, _t, _v) {
  if(_t=='W') obj.style.width = _v;
  if(_t=='H') obj.style.top = _v;
 }

 function fnSetCarSetting(car_maker_code, car_info_code) {
  var f = document.addform;
  f.car_maker_code.value = car_maker_code;
  f.car_info_code.value  = car_info_code;

  alert(f.car_info_code.value + ', ' + f.car_maker_code.value);
 }

 <? $framesrc = "/kboard/lib/get_sugest_info.php?qname=car_name&sname=sugdiv&surl=/kboard/board/proc/get_car_sugest.php"; ?>
 document.write("<div id='sugdiv' style='position:absolute;top:470px;left:493px;display:none'>");
 document.write("<iframe name='hdframe' src='<?=$framesrc?>' style='background-color:red;width:300px;height:150px;border:solid 1 black' frameborder=0></iframe>");
 document.write("</div>");

 var obj_sugdiv = document.getElementById('sugdiv');
</script>

<!-- 차량정보 div end -->

==============================================================================

 

 

-------------- get_sugest_info.php ------------

<link rel='stylesheet' href='/kboard/style.css'>
<script language='javascript' src='/kboard/js/prototype.js'></script>
<script language='javascript' src='/kboard/js/ajax.js'></script>
<script>
var req;
var userKeyword = "";
var oldUserKeyword = "";
var useSuggestFunction = true;
var totalKeywordCount = 0;
var curCursorPos = -1;
var guideDisplayFlag = true;
var buildListComplete = true;
var virtualValue = "";
var oldValue = "";
var QLIST_COUNT  = 5;
var isFirstBuild = false;
var service = "ktop";
var onMouseOverColor = '#e0e8f5';
var onMouseOutColor  = '#ffffff';
var qObj = getObject("<?=$qname?>","parent");
var sObj = getObject("<?=$sname?>","parent");

qObj.onkeydown = eventHandler;

 function eventHandler(e) {
  if("undefined"==typeof(e)) evt = parent.window.event;
  else evt = e;
  setFrameEvent(evt);
 }

 function isAvailableKeyCode(key) {
  /* 37~40(방향키) 112~123(F1~F12) 18(Alt) 17(Ctrl) 116(F5) (27)esc */
  var keyArr = new Array(17,18,37,39,116);
  for(var i=0; i<keyArr.length; i++) if(keyArr[i]==key) return false;
  return true;
 }

 function checkLayerDisplay(obj) {
  if(getObject(obj,"").style.display=='block') return true;
  else return false;
 }

 function moveFocusToSelect(key) {
  clearCursorPos();
  if(key==38) {
   if(curCursorPos==-1 || curCursorPos==0) {
    setQueryDisplayOff();
    qObj.value = userKeyword;
    return;
   } else {
    curCursorPos = curCursorPos - 1;
    if((curCursorPos+QLIST_COUNT) < totalKeywordCount) {
     getObject("querylist","").doScroll("scrollbarUp");
     getObject("querylist","").doScroll("scrollbarUp");
    }
   }
  } else if(key==40) {
   if(curCursorPos!=(totalKeywordCount-1)) {
    onMouseOutKeyword(curCursorPos);
    curCursorPos = curCursorPos + 1;
    if(curCursorPos > (QLIST_COUNT-1)) {
     getObject("querylist","").doScroll("scrollbarDown");
     getObject("querylist","").doScroll("scrollbarDown");
    }
   }
  } else if(key==13) {
   if(curCursorPos!=(totalKeywordCount-1)) {
    onMouseOutKeyword(curCursorPos);
    if(curCursorPos == -1) curCursorPos = curCursorPos + 1;

    onClickKeyword(curCursorPos);
   }
  }
  setTimeout("setCursorPos()",10);
 }

 function setCursorPos(num) {
  if(!buildListComplete) setTimeout("setCursorPos()",10); // 이벤트가 두번발생되는 경우
  if(checkLayerDisplay("querylist_border")) {
   var pos = curCursorPos;
   if(num==0) pos = 0;
   if(getObject("f"+pos,"")) {
    qObj.value = getObject("f"+pos,"").innerText;
    getObject("f"+pos,"").style.backgroundColor=onMouseOverColor;
    virtualValue = qObj.value;
   }
   return;
  }
 }

 function setFrameEvent(evt) {
  if (evt && useSuggestFunction) {
   var key = evt.keyCode;
   if(!isAvailableKeyCode(key)) return;
   else {
    if(key==27) setQueryDisplayOff();
    else if(key==38) moveFocusToSelect(key); // ↑
    else if(key==40) { // ↓
     if(qObj.value != '') {
      if(!checkLayerDisplay("querylist_border")) setQueryDisplayOn();
      else setTimeout("moveFocusToSelect(40)", 10);
     }
    } else if(key==13) {
     setTimeout("moveFocusToSelect(13)", 10);
    } else {
     setTimeout("setQueryValue()",10);
    }
   } // end else
  } // end if
 } // end setFrameEvent...

 function getObject(objectId,nodeObject) { // 객체 얻기 : checkW3C DOM, then MSIE 4, then NN 4.
  var doc = document;
  if(nodeObject!="") doc = eval(nodeObject + ".document");
  if(doc.getElementById && doc.getElementById(objectId)) return doc.getElementById(objectId); // 대부분의 브라우저
  else if (doc.all && doc.all(objectId)) return doc.all(objectId); // IE4와 5.0
  else if (doc.layers && doc.layers[objectId]) return doc.layers[objectId];  // Netscape 4.x
  else return false;
 }

 function checkChangeValue() {
  var newValue = qObj.value;
  
  var q = qObj.value;
  if(newValue=="") {
   oldValue = "";
   oldUserKeyword = "";
//   if(guideDisplayFlag) setQueryDisplayOff();
  }
  if(newValue!=oldValue && newValue!=virtualValue) setQueryValue();
  setTimeout("checkChangeValue()",100);
 }

 function setQueryValue() {
  var q = qObj.value;
  if(q == " ") return;

  if(q==oldUserKeyword) return;
  if(q.length < 20) {
   loadXMLDoc(q); // execute query...
   userKeyword = q;
   oldUserKeyword = q;
   oldValue = q;
  }
 }

 var _q;
 function loadXMLDoc(_str) {
  var str = checkStr(_str);
  var url = SUG_URL +"?q="+ str;
  _q = str;
  if (window.XMLHttpRequest) {
   req = new XMLHttpRequest();
   try {
    req.onreadystatechange = processReqChange;
    req.open("GET", url, true);
    req.send(null);
   } catch (e) {
    //alert(e);
   }
  } else if (window.ActiveXObject) {
   req = new ActiveXObject("Microsoft.XMLHTTP");
   if (req) {
    req.onreadystatechange = processReqChange;
    req.open("GET", url, true);
    req.send();
   }
  }
 }

 function checkStr(str) {
  var ch;
  var returnStr = "";
  for (var i=0; i<str.length; i++) {
   ch = str.charAt(i);
   if(ch==" ") returnStr += "%20";
   else returnStr +=ch;
  }

  return returnStr;
 }

 function processReqChange(req) {
  try {
   clearQueryList();
   buildQueryList();
  } catch(ex) {
   return;
  }
 }

 function setQueryDisplayOff() {
  getObject("querylist_border","").style.display = "none";
  getObject("hdframe","parent").style.display = "none";
  sObj.style.display = "block";
  curCursorPos = -1;
 }

 function onClickKeyword(curCursorPos) {
  qObj.value = getObject("f"+curCursorPos,"").innerText;
  
  var value1 = getObject("m"+curCursorPos,"").value;
  var value2 = getObject("c"+curCursorPos,"").value;

  parent.fnSetCarSetting(value1, value2);
  setQueryDisplayOff();
  clearQueryList();
 }

 function onMouseOverKeyword(curSorNum){
  clearCursorPos();
  curCursorPos = curSorNum;
  getObject("f"+curSorNum,"").style.backgroundColor = onMouseOverColor;
 }

 function onMouseOutKeyword(curSorNum){
  curCursorPos = curSorNum;
  if(getObject("f"+curCursorPos,"")) getObject("f"+curCursorPos,"").style.backgroundColor = onMouseOutColor;
 }

 function onMouseDownKeyword(curCursorPos) {
  getObject("f"+curCursorPos,"").style.cursor = 'hand';
 }

 function clearQueryList() {
  var q_list = getObject("querylist","");
  q_list.innerHTML = "";
 }

 function clearCursorPos() {
  try {
   for(var i=0; i<totalKeywordCount; i++) getObject("f"+i,"").style.backgroundColor=onMouseOutColor; 
  } catch (ex) {
   return;
  }
 }
 
 var car_maker_code;
 var car_info_code;
 function buildQueryList() {
  var q_list = getObject("querylist","");
  var reqvalue = req.responseText;
  var value = reqvalue.split('<br>');
  var str = "";
  
  var forlength = value.length -1;
  for(var i=0; i<forlength; i++) {
   totalKeywordCount = value[i].length;
   if(totalKeywordCount < 1) {
    //setQueryDisplayOff();
    return;
   } else {
    valuespl = value[i].split("^");
    highlightVal = highlightCheck(valuespl[valuespl.length-1]);
    str += "<div style='width:100%;padding:4px 0 0 6px;height:18px;cursor:default' id='f"+i+"' onclick='onClickKeyword("+i+")' onmouseover='onMouseOverKeyword("+i+")' onmouseout='onMouseOutKeyword("+i+")' onMouseDown='onMouseDownKeyword("+i+")'>" + highlightVal + "</div>";
    str += "<input type='hidden' name='m"+i+"' value='"+valuespl[0]+"'>";
    str += "<input type='hidden' name='c"+i+"' value='"+valuespl[1]+"'>";
    if(!isFirstBuild) setQueryDisplayOn(); // 최초 검색시에는 화면 보여주지 않는다.
    isFirstBuild = false;
   }
  }

  q_list.innerHTML = str;
  sObj.style.display = 'block';
  getObject("guidelist","").style.display = 'none';
  curCursorPos = -1;
  buildListComplete = true;
  if(service=="ktop" && totalKeywordCount > 0) {
   for(var i=0;i<2;i++) { // scroll 초기화
    var obj = getObject("querylist","");
    obj.doScroll("pageUp");
   }
  }
 }

 function setResizeLayer() {
  var DaumTopMax = QLIST_COUNT;
  var itemHeight = 18;
  var footerHeight = 31;
  var q_list = getObject("querylist","");
  if(totalKeywordCount > (QLIST_COUNT)) {  
   q_list.style.height = itemHeight * DaumTopMax; 
   getObject("hdframe","parent").style.height = itemHeight * DaumTopMax + footerHeight;
  } else {
   q_list.style.height = itemHeight*totalKeywordCount
   getObject("hdframe","parent").style.height = itemHeight*totalKeywordCount + footerHeight;
  }
 }

 function setQueryDisplayOn() {
  if(totalKeywordCount > 0) {
   setResizeLayer();
   getObject("querylist_border","").style.display = "block";
   getObject("hdframe","parent").style.display = "block";
  }
 }

 function fnChkKor( koreanChar ) {
  if(koreanChar == null) return false;
  for(var i=0;i<koreanChar.length;i++) {
   var c=koreanChar.charCodeAt(i);
   //( 0xAC00 <= c && c <= 0xD7A3 ) 초중종성이 모인 한글자
   //( 0x3131 <= c && c <= 0x318E ) 자음 모음

   if( !(
        ( 0xAC00 <= c && c <= 0xD7A3 )
     || ( 0x3131 <= c && c <= 0x318E )
      )
      ) {     
    return false ;
   } // end if
  } // end for
  return true ;
 }

 function highlightCheck(str) {
  var rtStr = str;
  var _startIndex = str.indexOf(_q);

  if(!fnChkKor(_q)) _startIndex = parseInt(_startIndex,10) + parseInt(1,10);
  var _str = str.substring(_startIndex,_q.length).toLowerCase();
  if(_str==_q.toLowerCase())
   rtStr = "<font color='EB550C'>" + str.substring(_startIndex,_q.length) + "</font>" + str.substring(_q.length,str.length);
  return rtStr;
 }

 function init() {
  checkChangeValue();
 }

 var SUG_URL = '<?=$surl?>';
 init();
</script>

<body style="margin:0;padding:0" onload="init()">
<div id="QL">
<div id="querylist_border"><div id="querylist"></div></div>
<div id="guidelist"></div>
</div>
<div id="footer"></div>
</body>

 

 

-------------- get_sugest_info.php ------------

 

서버 접속 파일

<?
 include $DOCUMENT_ROOT."/kboard/lib/head.php";

 $today = time();
 $date = date('Ymd');
 set_time_limit(0);

 if (!function_exists('convert_charset')) {
  /*
  -----------------------------------------------------------
   Charset 을 변환하는 함수
  -----------------------------------------------------------
  iconv 함수가 있으면 iconv 로 변환하고
  없으면 mb_convert_encoding 함수를 사용한다.
  둘다 없으면 사용할 수 없다.
  */
  function convert_charset($from_charset, $to_charset, $str) {

   if( function_exists('iconv') )
    return iconv($from_charset, $to_charset, $str);
   elseif( function_exists('mb_convert_encoding') )
    return mb_convert_encoding($str, $to_charset, $from_charset);
   else
    die("Not found 'iconv' or 'mbstring' library in server.");
  }
 }

// $q = convert_charset('UTF-8','CP949',$q);
 if(!$q) exit;
 $q = str_replace(' ', '', $q);
 $org_q = $q;
 $q = '%'.$q.'%';
 
/*

 $sql = "select no, binary(str) str
    , case when substring(str, 1, 1) = '$org_q' then 1 else 2 end ss
    , case when (     substring(str, 1, 1) = '$org_q'
           and LENGTH(binary(trim(str)))
          = 2 ) then 1 else 2 end se
   from bbs_sugest where (str like '$q' or f like '$q')
   order by ss, se
   LIMIT 0, 100";
*/

cjj = 한글의 초성,중성,종성을 검색...

jaso_split( $str )을 이용하여 db에 입력시 한글을 분리하여 입력

예..) 현대자동차 => 혀ㄴㄷㅐ ㅈ ㅏ ㄷ ㅗ ㅇ ㅊ ㅏ                   

    $sql = "select b.car_maker_code, b.car_info_code, concat(a.car_maker_name, ' ', b.car_name, ' ', b.car_opt1) str
   from car_maker a
     , car_info b
   where a.car_maker_code = b.car_maker_code
   and   (lower(replace(concat(a.car_maker_name,b.car_name), ' ', '')) like lower('$q') or cjj like lower('$q'))
   order by replace(concat(a.car_maker_name,b.car_name), ' ', '') asc
   limit 0, 100";

 $result = mysql_query($sql);
 $selstr = convert_charset('CP949', 'UTF-8', "선택");

 $out2 = "";
 while($row = mysql_fetch_object($result)) {
  $str = $row->car_maker_code."^".$row->car_info_code."^".$row->str;

  $out = convert_charset('CP949', 'UTF-8', $str);

  $out2 .= $out."<br>";
 }

 echo $out2;
?>

출처 : Daum sugest 참고 및 본인

"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기,
각종 광고, 영업, 판매, 제안서, 전단지
반응율 3배×10배 이상 높이는 마법의 8단계 공식"
자세히보기

Comments

번호 제목 글쓴이 날짜 조회
3285 이것은 AI파일 미리보기입니다. 댓글3 M 최고의하루 01.15 3587
3284 이미지미리보기pds파일미리보기파일입니다^^ 댓글2 99 단국강토 01.14 2826
3283 동영상 캡쳐(Capture) 아주 쉽게 하기~ 99 단국강토 01.14 2616
3282 자판기안의 특수문자 99 단국강토 01.13 2531
3281 ntdll.dll 오류 해결방법 M 최고관리자 01.12 4393
3280 인터넷 동영상 저장하기 - 넷트랜스포터 사용 - M 최고의하루 01.12 3099
3279 옛날 기사를 찾아보고 싶을때 99 단국강토 01.08 2231
3278 CD 음악 mp3로 바꾸기 99 단국강토 01.08 2500
3277 알씨로 초간단 동영상 슬라이드쇼 만들기 99 단국강토 01.07 2842
3276 IP 추적은 어떻게 하는가? 99 단국강토 01.07 2392
3275 일본어로 된 웹을 한글로 즐기기 99 단국강토 01.06 2352
3274 이것은 AI파일 미리보기입니다. 댓글2 M 최고의하루 01.15 4030
3273 이미지미리보기pds파일미리보기파일입니다^^ 99 단국강토 01.14 2448
3272 동영상 캡쳐(Capture) 아주 쉽게 하기~ 99 단국강토 01.14 2783
3271 공유기 차단 무력화 시키는 법 99 단국강토 01.13 3541
3270 자판기안의 특수문자 99 단국강토 01.13 2364
3269 ntdll.dll 오류 해결방법 M 최고의하루 01.12 3661
3268 인터넷 동영상 저장하기 - 넷트랜스포터 사용 - M 최고의하루 01.12 3226
3267 옛날 기사를 찾아보고 싶을때 99 단국강토 01.08 2169
3266 CD 음악 mp3로 바꾸기 99 단국강토 01.08 2485
3265 알씨로 초간단 동영상 슬라이드쇼 만들기 99 단국강토 01.07 3311
3264 IP 추적은 어떻게 하는가? 99 단국강토 01.07 2212
3263 일본어로 된 웹을 한글로 즐기기 99 단국강토 01.06 2308
3262 [컴퓨터 키보드, 특수문자 정식 명칭들] M 최고의하루 12.18 3700
3261 하드,CPU,RAM 지원표 M 최고의하루 12.18 2584
3260 award bios 어워드 바이오스 설정법 M 최고의하루 12.18 3943
3259 내장 그래픽카드 죽이는 법 M 최고의하루 12.04 4881
3258 컴퓨터 조립 M 최고의하루 12.04 2830
3257 USB 버젼 속도 차이 2 천진난만 02.20 2375
3256 제가 사용하고 있는 마케팅프로그램입니다 댓글1 3 천지인 05.23 13192
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취