Ερώτηση σχετικά με Word Suggestion (ajax & php)

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
philos
Δημοσιεύσεις: 264
Εγγραφή: 30 Αύγ 2007 23:32

Ερώτηση σχετικά με Word Suggestion (ajax & php)

Δημοσίευση από philos » 07 Ιουν 2011 01:15

Λοιπόν, στο site μου όταν πας να κάνεις αναζήτηση κάποιου μέλους, καθώς συμπληρώνεις το ψευδώνυμό του στο πεδίο αναζήτησης, εμφανίζεται η λίστα των ψευδωνύμων τα γράμματα των οποίων ταιριάζουν με αυτό που πληκτρολογεί ο χρήστης:
Εικόνα

Ο κώδικας html για αυτό το πεδίο είναι:

Κώδικας: Επιλογή όλων

<div class="fieldset">
				Όνομα χρήστη &#40;ψευδώνυμο&#41;
				<div id="userfield"><input type="text" class="bginput" id="userfield_txt" size="50" name="ausername" value="" /></div>
				
					<div id="userfield_menu" class="vbmenu_popup" style="display&#58;none"></div>
					<script type="text/javascript" src="clientscript/vbulletin_ajax_namesugg.js?v=$vboptions&#91;simpleversion&#93;"></script>
					<script type="text/javascript">
					<!--
					vbmenu_register&#40;'userfield', true&#41;;
					snc = new vB_AJAX_NameSuggest&#40;'snc', 'userfield_txt', 'userfield'&#41;;
					//-->
					</script>
				
			</div>
Και το περιεχόμενο του js αρχείου:

Κώδικας: Επιλογή όλων

function vB_AJAX_NameSuggest&#40;C,A,D&#41;&#123;var B=userAgent.match&#40;/applewebkit\/&#40;&#91;0-9&#93;+&#41;/&#41;;if&#40;AJAX_Compatible&&!&#40;is_saf&&!&#40;B&#91;1&#93;>=412&#41;&#41;&#41;&#123;this.menuobj=fetch_object&#40;D+"_menu"&#41;;this.textobj=fetch_object&#40;A&#41;;this.textobj.setAttribute&#40;"autocomplete","off"&#41;;this.textobj.onfocus=function&#40;E&#41;&#123;this.obj.active=true&#125;;this.textobj.onblur=function&#40;E&#41;&#123;this.obj.active=false&#125;;this.textobj.obj=this;this.varname=C;this.menukey=D;this.fragment="";this.donenames="";this.selected=0;this.menuopen=false;this.timeout=null;this.names=new Array&#40;&#41;;this.active=false;this.ajax_req=null;this.allow_multiple=false;this.min_chars=3;this.get_text=function&#40;&#41;&#123;if&#40;this.allow_multiple&#41;&#123;var E=this.textobj.value.lastIndexOf&#40;";"&#41;;if&#40;E==-1&#41;&#123;this.donenames=new String&#40;""&#41;;this.fragment=new String&#40;this.textobj.value&#41;&#125;else&#123;this.donenames=new String&#40;this.textobj.value.substring&#40;0,E+1&#41;&#41;;this.fragment=new String&#40;this.textobj.value.substring&#40;E+1&#41;&#41;&#125;&#125;else&#123;this.fragment=new String&#40;this.textobj.value&#41;&#125;this.fragment=PHP.trim&#40;this.fragment&#41;&#125;;this.set_text=function&#40;E&#41;&#123;if&#40;this.allow_multiple&#41;&#123;this.textobj.value=PHP.ltrim&#40;this.donenames+" "+PHP.unhtmlspecialchars&#40;this.names&#91;E&#93;&#41;+" ; "&#41;&#125;else&#123;this.textobj.value=PHP.unhtmlspecialchars&#40;this.names&#91;E&#93;&#41;&#125;this.textobj.focus&#40;&#41;;this.menu_hide&#40;&#41;;return false&#125;;this.move_row_selection=function&#40;E&#41;&#123;var F=parseInt&#40;this.selected,10&#41;+parseInt&#40;E,10&#41;;if&#40;F<0&#41;&#123;F=this.names.length-1&#125;else&#123;if&#40;F>=this.names.length&#41;&#123;F=0&#125;&#125;this.set_row_selection&#40;F&#41;;return false&#125;;this.set_row_selection=function&#40;E&#41;&#123;var F=fetch_tags&#40;this.menuobj,"td"&#41;;F&#91;this.selected&#93;.className="vbmenu_option";this.selected=E;F&#91;this.selected&#93;.className="vbmenu_hilite"&#125;;this.key_event_handler=function&#40;E&#41;&#123;E=E?E&#58;window.event;if&#40;this.menuopen&#41;&#123;switch&#40;E.keyCode&#41;&#123;case 38&#58;this.move_row_selection&#40;-1&#41;;return false;case 40&#58;this.move_row_selection&#40;1&#41;;return false;case 27&#58;this.menu_hide&#40;&#41;;return false;case 13&#58;this.set_text&#40;this.selected&#41;;return false&#125;&#125;this.get_text&#40;&#41;;if&#40;this.fragment.length>=this.min_chars&#41;&#123;clearTimeout&#40;this.timeout&#41;;this.timeout=setTimeout&#40;this.varname+".name_search&#40;&#41;;",500&#41;&#125;else&#123;this.menu_hide&#40;&#41;&#125;&#125;;this.name_search=function&#40;&#41;&#123;if&#40;this.active&#41;&#123;this.names=new Array&#40;&#41;;if&#40;YAHOO.util.Connect.isCallInProgress&#40;this.ajax_req&#41;&#41;&#123;YAHOO.util.Connect.abort&#40;this.ajax_req&#41;&#125;this.ajax_req=YAHOO.util.Connect.asyncRequest&#40;"POST","ajax.php?do=usersearch",&#123;success&#58;this.handle_ajax_request,failure&#58;vBulletin_AJAX_Error_Handler,timeout&#58;vB_Default_Timeout,scope&#58;this&#125;,SESSIONURL+"securitytoken="+SECURITYTOKEN+"&do=usersearch&fragment="+PHP.urlencode&#40;this.fragment&#41;&#41;&#125;&#125;;this.handle_ajax_request=function&#40;F&#41;&#123;if&#40;F.responseXML&#41;&#123;var G=F.responseXML.getElementsByTagName&#40;"user"&#41;;for&#40;var E=0;E<G.length;E++&#41;&#123;this.names&#91;E&#93;=G&#91;E&#93;.firstChild.nodeValue&#125;if&#40;this.names.length>0&#41;&#123;this.menu_build&#40;&#41;;this.menu_show&#40;&#41;&#125;else&#123;this.menu_hide&#40;&#41;&#125;&#125;&#125;;this.menu_build=function&#40;&#41;&#123;this.menu_empty&#40;&#41;;var F=new RegExp&#40;"^&#40;"+PHP.preg_quote&#40;this.fragment&#41;+"&#41;","i"&#41;;var G=document.createElement&#40;"table"&#41;;G.cellPadding=4;G.cellSpacing=1;G.border=0;for&#40;var E in this.names&#41;&#123;if&#40;YAHOO.lang.hasOwnProperty&#40;this.names,E&#41;&#41;&#123;var H=G.insertRow&#40;-1&#41;.insertCell&#40;-1&#41;;H.className=&#40;E==this.selected?"vbmenu_hilite"&#58;"vbmenu_option"&#41;;H.title="nohilite";H.innerHTML='<a onclick="return '+this.varname+".set_text&#40;"+E+'&#41;">'+this.names&#91;E&#93;.replace&#40;F,"<strong>$1</strong>"&#41;+"</a>"&#125;&#125;this.menuobj.appendChild&#40;G&#41;;if&#40;this.vbmenu==null&#41;&#123;if&#40;typeof &#40;vBmenu.menus&#91;this.menukey&#93;&#41;!="undefined"&#41;&#123;this.vbmenu=vBmenu.menus&#91;this.menukey&#93;&#125;else&#123;this.vbmenu=vBmenu.register&#40;this.menukey,true&#41;&#125;&#125;else&#123;this.vbmenu.init_menu_contents&#40;&#41;&#125;&#125;;this.menu_empty=function&#40;&#41;&#123;this.selected=0;while&#40;this.menuobj.firstChild&#41;&#123;this.menuobj.removeChild&#40;this.menuobj.firstChild&#41;&#125;&#125;;this.menu_show=function&#40;&#41;&#123;if&#40;this.active&#41;&#123;this.vbmenu.show&#40;fetch_object&#40;this.menukey&#41;,this.menuopen&#41;;this.menuopen=true&#125;&#125;;this.menu_hide=function&#40;&#41;&#123;try&#123;this.vbmenu.hide&#40;&#41;&#125;catch&#40;E&#41;&#123;&#125;this.menuopen=false&#125;;this.textobj.onkeyup=function&#40;E&#41;&#123;return this.obj.key_event_handler&#40;E&#41;&#125;;this.textobj.onkeypress=function&#40;E&#41;&#123;E=E?E&#58;window.event;if&#40;E.keyCode==13&#41;&#123;return&#40;this.obj.menuopen?false&#58;true&#41;&#125;&#125;&#125;&#125;;
Στο ajax.php (που αναφέρεται παραπάνω στο js) για do=usersearch λέει τα παρακάτω:

Κώδικας: Επιλογή όλων

// #############################################################################
// user name search

if &#40;$_POST&#91;'do'&#93; == 'usersearch'&#41;
&#123;
	$vbulletin->input->clean_array_gpc&#40;'p', array&#40;'fragment' => TYPE_STR&#41;&#41;;

	$vbulletin->GPC&#91;'fragment'&#93; = convert_urlencoded_unicode&#40;$vbulletin->GPC&#91;'fragment'&#93;&#41;;

	if &#40;$vbulletin->GPC&#91;'fragment'&#93; != '' AND strlen&#40;$vbulletin->GPC&#91;'fragment'&#93;&#41; >= 3&#41;
	&#123;
		$fragment = htmlspecialchars_uni&#40;$vbulletin->GPC&#91;'fragment'&#93;&#41;;
	&#125;
	else
	&#123;
		$fragment = '';
	&#125;

	$xml = new vB_AJAX_XML_Builder&#40;$vbulletin, 'text/xml'&#41;;
	$xml->add_group&#40;'users'&#41;;

	if &#40;$fragment != ''&#41;
	&#123;
		$users = $db->query_read_slave&#40;"
			SELECT userid, username FROM " . TABLE_PREFIX . "user
			WHERE username LIKE&#40;'" . $db->escape_string_like&#40;$fragment&#41; . "%'&#41;
			ORDER BY username
			LIMIT 15
		"&#41;;
		while &#40;$user = $db->fetch_array&#40;$users&#41;&#41;
		&#123;
			$xml->add_tag&#40;'user', $user&#91;'username'&#93;, array&#40;'userid' => $user&#91;'userid'&#93;&#41;&#41;;
		&#125;
	&#125;

	$xml->close_group&#40;&#41;;
	$xml->print_xml&#40;&#41;;
&#125;


Αυτό που θέλω να κάνω είναι να χρησιμοποιήσω την ίδια λειτουργία (word suggestion) και σε ένα άλλο πεδίο αναζήτησης της ιστοσελίδας μου. Τα δεδομένα-λέξεις βρίσκονται στον table glossary στις εγγραφές του πεδίου glossaryname.
Τι αλλαγές πρέπει να κάνω στον παραπάνω κώδικα ώστε να προκύψει αυτό το αντίστοιχο που θέλω;
Υποθέτω ότι πρέπει απλά να προσθέσω στο ajax.php κάτι παρόμοιο για αναζήτηση στο συγκεκριμένο πεδίο...




Σας ευχαριστώ!
-petros

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6234
Εγγραφή: 30 Νοέμ 2004 03:09

Ερώτηση σχετικά με Word Suggestion (ajax & php)

Δημοσίευση από fafos » 07 Ιουν 2011 17:00

kalytera na dhmiourghseis kati anexarthto apo ton kodika pou dineis para na kathseis na ftiaxeis kati idio.. psakse gia autocomplete me jquery (edo kai sto google)
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες