Silentracer
%Europe/Berlin %490 %2005, 12:46
Hallo,
Ik heb de opdracht gekregen om voor een vriend een website te maken ivm met vastgoed,
kan iemand mij wegwijs maken hoe ik een zoekfunctie kan integreren zodat mensen kunnen zoeken op bvb prijsklasse, locatie e.d. :S
mvg
Silentracer :D
brossiekoppie
%Europe/Berlin %725 %2005, 18:24
Eerst en vooral heb je dan liefst een database nodig met de huizen en hun gegevens (plaats, prijs, ...). Het is best dat je vooraf hier goed over nadenkt, een goede tabellenstructuur in mysql bespaart al je achteraf veel denkwerk in php.
Dan heb je nog een zoekfunctie nodig in php:
De simpele manier:
$zoekterm = addSlashes($zoekterm);
$sql = "SELECT * FROM huizen WHERE huizen_locatie LIKE '%$search_term_esc%'";
De betere/snellere/ingewikkeldere manier:
deze snippet vond ik via google en is opensource :P (je moet natuurlijk nog het een en het ander aanpassen)
function search_split_terms($terms){
$terms = preg_replace("/\"(.*?)\"/e", "search_transform_term('\$1')", $terms);
$terms = preg_split("/\s+|,/", $terms);
$out = array();
foreach($terms as $term){
$term = preg_replace("/\{WHITESPACE-([0-9]+)\}/e", "chr(\$1)", $term);
$term = preg_replace("/\{COMMA\}/", ",", $term);
$out[] = $term;
}
return $out;
}
function search_transform_term($term){
$term = preg_replace("/(\s)/e", "'{WHITESPACE-'.ord('\$1').'}'", $term);
$term = preg_replace("/,/", "{COMMA}", $term);
return $term;
}
function search_escape_rlike($string){
return preg_replace("/([.\[\]*^\$])/", '\\\$1', $string);
}
function search_db_escape_terms($terms){
$out = array();
foreach($terms as $term){
$out[] = '[[:<:]]'.AddSlashes(search_escape_rlike($term)).'[[:>:]]';
}
return $out;
}
function search_perform($terms){
$terms = search_split_terms($terms);
$terms_db = search_db_escape_terms($terms);
$terms_rx = search_rx_escape_terms($terms);
$parts = array();
foreach($terms_db as $term_db){
$parts[] = "content_body RLIKE '$term_db'";
}
$parts = implode(' AND ', $parts);
$sql = "SELECT * FROM Content WHERE $parts";
$rows = array();
$result = mysql_query($sql);
while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
$row[score] = 0;
foreach($terms_rx as $term_rx){
$row[score] += preg_match_all("/$term_rx/i", $row[content_body], $null);
}
$rows[] = $row;
}
uasort($rows, 'search_sort_results');
return $rows;
}
function search_rx_escape_terms($terms){
$out = array();
foreach($terms as $term){
$out[] = '\b'.preg_quote($term, '/').'\b';
}
return $out;
}
function search_sort_results($a, $b){
$ax = $a[score];
$bx = $b[score];
if ($ax == $bx){ return 0; }
return ($ax > $bx) ? -1 : 1;
}
function search_html_escape_terms($terms){
$out = array();
foreach($terms as $term){
if (preg_match("/\s|,/", $term)){
$out[] = '"'.HtmlSpecialChars($term).'"';
}else{
$out[] = HtmlSpecialChars($term);
}
}
return $out;
}
function search_pretty_terms($terms_html){
if (count($terms_html) == 1){
return array_pop($terms_html);
}
$last = array_pop($terms_html);
return implode(', ', $terms_html)." and $last";
}
#
# do the search here...
#
$results = search_perform($HTTP_GET_VARS[q]);
$term_list = search_pretty_terms(search_html_escape_terms(searc h_split_terms($HTTP_GET_VARS[q])));
#
# of course, we're using smarty ;)
#
$smarty->assign('term_list', $term_list);
if (count($results)){
$smarty->assign('results', $results);
$smarty->display('search_results.txt');
}else{
$smarty->display('search_noresults.txt');
}
mech7
%Europe/Berlin %753 %2005, 19:04
Full text op je mysql table zetten geeft ook vaak goede resultaten.. en is snel
Silentracer
%Europe/Berlin %731 %2005, 18:33
hey bedankt jongens maar als ik dit zie ga eerst beginnen met een beetje PHP studeren.
vond het wel raar dat jullie reactie niet in mijn mailbox terecht kwam hmmm
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.