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

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

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

        <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

번호 제목 글쓴이 날짜 조회
3165 vb 마우스휠 2 아론k 06.24 4009
3164 간단한 windows 스케줄 2 아론k 06.24 2996
3163 한글 영문변환 참고 문자표 2 아론k 06.24 4914
3162 자바 스윙 단축키 설정 2 나야나 05.26 3698
3161 자바 리플렉션 관련 2 나야나 05.26 2945
열람중 간단한 sugest 기능 2 kkkkkkk 02.16 3562
3159 유니코드 사용하기 13 김영철 01.29 3213
3158 msxml 사용준비~!(checklist& 설정사항) 13 김영철 01.29 4177
3157 AJAX으로 놀자~ (채팅) 13 김영철 01.29 3316
3156 XML을 해야 하는 이유 13 김영철 01.29 6997
3155 AJAX 강의 2장 - XMLHttpRequest 오브젝트 사용하기 13 김영철 01.29 4839
3154 A Simpler Ajax Path 13 김영철 01.29 3202
3153 [AJAX] 한글지원문제 해결방법 13 김영철 01.29 3217
3152 [팁] XMLHttpRequest를 사용할 때 한글 파라미터의 인코딩 처리 방법 13 김영철 01.29 4409
3151 ServerXMLHTTP의 인코딩 문제 13 김영철 01.29 3722
3150 prototype.js 13 김영철 01.29 2806
3149 AJAX 관련 새로운 url 정리 13 김영철 01.29 3905
3148 Ajax를 쓰는 이유라고 할까나? 13 김영철 01.29 3152
3147 Ajax [www.atmarkit.co.jp] 13 김영철 01.29 3309
3146 Daum의 Ajax 개발 사례 13 김영철 01.29 4177
3145 AJAX관련 IE 버그. -1072896658 13 김영철 01.29 3359
3144 PHP 설정과 MySQL에 따른 Ajax 사용하기 13 김영철 01.29 3208
3143 mouse wheel 13 김영철 01.29 3071
3142 Ajax 간단한 예제(우편번호검색) 13 김영철 01.29 4018
3141 Prototype활용 (prototype속성) 13 김영철 01.29 2792
3140 [문서] prototype.js v1.4.0 13 김영철 01.29 2926
3139 동적테이블 속성도 복사 13 김영철 01.29 2884
3138 Aqua data studio 한글 깨짐 설정 13 김영철 01.29 9019
3137 삭제페이지 소스 13 김영철 01.29 2840
3136 c강좌 (20) 자기참조 구조체 13 김영철 01.29 3540
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취