![]() | ||||||||
![]() |
Karte | Kalender | Suche | Bookmarks | Experte | FAQ |
ModuleDownloadSMFinder_Query_analyzeSearchWird verwendet von:SMFinder_Main SMFinder_Query_analyzeSearch Keine Erläuterungen gefunden. <?php /* published under GPL www.gnu.org/licenses/gpl.html */ function SMFinder_Query_analyzeSearch($searchString){ $searchString=trim($searchString); $searchStrings=explode(" ",$searchString); list($cats,$atrs,$keywords,$residuum) = SMFinder_Query_filterCatsAtrsFromString($searchStrings); list($geoLat,$geoLon,$residuum) = SMFinder_Query_filterTownsFromString($residuum); if ($GLOBALS['debug']){ echo "<aj>SMFinder_Query_analyzeSearch.php</aj><span style='color:silver'>"; echo "<br>Kategorien: <br>";print_r($cats); echo "<br>Attribute: <br>";print_r($atrs); echo "<br>Orte: <br>";print_r($geoLat);echo "<p></p></span>"; } if (!empty($geoLat)){ include_once("SMFinder_Geo_Umkreis.php"); list($lat_min,$lat_max,$lon_min,$lon_max) = SMFinder_Geo_Umkreis($geoLat[0],$geoLon[0],$GLOBALS['searchRadius']); }else{ $lat_min=""; $lat_max=""; $lon_min=""; $lon_max=""; } /* lock for searchstring as 'fn' */ /* copied from SMFinder_Edit_genUID.php */ $uid = strtolower(strtr($searchString, "ÄÖÜß", "äöüs")); $uid = preg_replace("/[^A-Za-z0-9äöü]+/", "_", $uid); $uid = preg_replace("/[_]+$/", "", $uid); $fn = preg_replace("/^[_]+/", "", $uid); /* The UID contains the fn but only lower case letters and no suspicious letters. */ include("SMFinder_Query_getUID4fn.php"); $UIDs4fn = SMFinder_Query_getUID4fn("address",$fn); include_once("SMFinder_Query_getUID4CatsAtrsGeo.php"); $limit=$GLOBALS['resultsPerPage']; if (empty($_GET['p'])){ list($UIDs,$stati,$names,$count) # = SMFinder_Query_getUID4CatsAtrsGeo("address",$cats,$atrs,"AND",$lat_min,$lat_max,$lon_min,$lon_max,0,$limit); if ($UIDs4fn){ $UIDs = array_merge($UIDs4fn,$UIDs); } }else{ $page=$_GET['p']; list($UIDs,$stati,$names,$count) # = SMFinder_Query_getUID4CatsAtrsGeo("address",$cats,$atrs,"AND",$lat_min,$lat_max,$lon_min,$lon_max,$page,$limit); $count=$_GET['c']; } return array($UIDs,$residuum,$cats,$atrs,$keywords,$count); } function SMFinder_Query_filterCatsAtrsFromString($searchStrings){ include_once("SMFinder_Elementdefinitions.php"); for ($s=0;$s<count($searchStrings);$s++){ $bad=array("ä","ö","ü","ß"); $good=array("ae","oe","ue","sz"); $searchStrings[$s]=str_replace($bad,$good,$searchStrings[$s]); } #s list($catsAddressFound,$keywords,$residuumCats) = filterString($searchStrings,$cats_address,$aliasCats_address); list($atrsAddressFound,$keywordsTmp,$residuumAtrs) = filterString($searchStrings,$atrs_address,$aliasAtrs_address); $keywords = array_merge($keywords,$keywordsTmp); /* residuum = no matches */ $residuum=array(); for ($s=0;$s<count($searchStrings);$s++){ if (strlen($residuumCats[$s])>1 AND strlen($residuumAtrs[$s])>1 AND $residuumCats[$s]==$residuumAtrs[$s]){ array_push($residuum,$residuumCats[$s]); } } #s if ($GLOBALS['debug'] AND false){ echo "<aj>SMFinder_Query_filterCatsAtrsFromString</aj><br>"; echo "catsFound: ";print_r($catsAddressFound);echo "<br>"; echo "atrsFound: ";print_r($atrsAddressFound);echo "<br>"; echo "residuum: ";print_r($residuum);echo"<br>"; } return array($catsAddressFound,$atrsAddressFound,$keywords,$residuum); } function filterString($searchStrings,$keywords,$alias){ $NoStrings = count($searchStrings); $NoKeywords = count($keywords); $keywordsFound = array(); $aliasContained= array(); $unClearStrings=$searchStrings; $s=-1; while ($s<=$NoStrings AND $s<1e2){ $s++; $isUnclear=true; for ($c=0;$c<$NoKeywords;$c++){ $found=false; /* look for keyword and its aliases */ if (strlen($keywords[$c])>4){ if (eregi($keywords[$c],$searchStrings[$s])){$found=true;} }else{ if (strtolower($keywords[$c])==strtolower($searchStrings[$s])){$found=true;} } for ($a=0;$a<count($alias[$keywords[$c]]);$a++){ if (strlen($alias[$keywords[$c]][$a])>4){ if (eregi($alias[$keywords[$c]][$a],$searchStrings[$s])){$found=true;} }else{ if (strtolower($alias[$keywords[$c]][$a])==strtolower($searchStrings[$s])){$found=true;} } } #a if ($found){ $isUnclear=false; array_push($keywordsFound,$keywords[$c]); array_push($aliasContained,$keywords[$c]); /* Suche nach 'Gummistiefel' soll sowohl 'Gummi' als auch 'Stiefel' liefern, deswegen wird nicht $searchString reduziert, aber es wird vermerkt, welche Worte bereits gefunden wurden. */ /* $NoStrings--; for ($ss=$s;$ss<$NoStrings;$ss++){ $searchStrings[$ss]=$searchStrings[$ss+1]; } #ss $dummy = array_pop($searchStrings); $s--; */ } } #c if ($isUnclear){ $unClearStrings[$s]=$searchStrings[$s]; }else{ $unClearStrings[$s]=""; } } #s return array($keywordsFound,$aliasContained,$unClearStrings); } function SMFinder_Query_filterTownsFromString($searchStrings){ include_once("SMFinder_Geo_getGeo.php"); $NoStrings = count($searchStrings); $geoLat = array(); $geoLon = array(); $s=-1; while ($s<$NoStrings AND $s<1e2){ $s++; $lat=""; if (strlen($searchStrings[$s])>4){ list($PLZ,$lat,$lon) = SMFinder_Geo_getGeo4City($searchStrings[$s]); } #echo $searchStrings[$s]."\t".$lat."\t".$lon."<br>\n"; if (!empty($lat)){ array_push($geoLat,$lat); array_push($geoLon,$lon); for ($ss=$s;$ss<$NoStrings-1;$ss++){ $searchStrings[$ss]=$searchStrings[$ss+1]; } #ss $dummy = array_pop($searchStrings); $NoStrings=$NoStrings-1; } } #s return array($geoLat,$geoLon,$searchStrings); } ?> IndexFür die Funktionalität des SM-Finders sind viele kleine Tools notwendig. Alle Funktionen beginnen mit SMFinder_ um deren Ursprung zu kennzeichnen. Dem schließt sich die Funktionsgruppe, z.B. Geo_ an, gefolgt vom eigentlichen Namen, der die Aufgabe der Funktion widerspiegeln soll, z.B. PLZ2DB. Der gesamte Sourcecode darf gemäß GNU General Public License weiterverbreitet werden. |
![]() |
Die hier zur Verfügung gestellten Informationen basieren auf dem Austauschnetzwerk des SM-Finders.
Änderungen an eurem Datensatz könnt ihr z.B. beim Arbeitskreis SM-Finder vornehmen.
Bei Fragen und Problemen schreibt bitte an: sm-finderki-co.org
Der AK-SM-Finder ist korporatives Mitglied der BVSM e.V.
Für Aktualität und Richtigkeit der dargebotenen Infomationen kann keine Gewähr übernommen werden!