ich hab mir das Standard-Suchausgabe-Modul so "umgeschrieben", dass ich es als Livesuche verwenden kann. Das ganze funktioniert auch wunderbar, die Ergebnisse, die zurückgeliefert werden sind die selben, die auch das normale Suchmodul ausgibt. So weit so gut, allerdings gibt es das Problem, dass Suchbegriffe, die eigentlich meiner Meinung nach Ergebnisse zurückliefern sollten, dies nicht tun. Zum Beispiel habe ich einen Testartikel angelegt. Dieser Artikel besteht aus folgenden Bereichen
1x Headline
2x Content
Der Inhalt der Headline:
About us
Der Inhalt des ersten Contentbereichs:
BLI BLA BLUBBERFISCH IST DA

Der Inhalt des weiten Contentbereichs:
der große böse bliblablubberfisch treibt sich auf dieser Internetseite herum.
Der Artikel ist scheinbar richtig indiziert, in der Suche taucht er jedenfalls auf, wenn ich als Suchbegriff z.B. About-Us angebe, wird die Seite korrekt in den Ergebnissen angezeigt. Das selbe gilt, wenn ich folgendes eingebe:
"bli bla",
"blib bla b",
"bli bla bl"
Bei einer Suche nach
"blib bla blu" bekomme ich allerdings keine Ergebnisse angezeigt, obwohl das eins zu eins der String aus dem Text ist.
Das selbe Phänomen tritt auf, wenn ich einen String aus dem zweiten HTML-Container suche:
"blabl" (Teil von bliblablubberfisch) gibt nichts zurück
"bberf" (Ebenfalls Teil von bliblablubberfisch) gibt den Artikel zurück.
Ich wüsste gerne, wie dieses Verhalten zustande kommt, denke nicht das das mein Fehler ist (ich hoffe jedenfalls nicht!)

Anbei nochmal die Konfiguration:
Das Ausgabe-Modul wird einfach als Artikel mit einem eigenen (ansonsten leeren) Template erstellt und in einer beliebigen Kategorie abgelegt. Die Artikel-Id wird von der Ajax-Suche als Action-URL benutzt. Der Code sieht folgendermaßen aus (ist noch in der Überarbeitungsphase):
Code: Alles auswählen
<?
cInclude('classes', 'class.search.php');
cInclude('classes', 'class.artspec.php');
cInclude('classes', 'class.template.php');
cInclude('includes', 'functions.api.string.php');
cInclude("frontend", "includes/functions.navigation.php");
cInclude('classes', 'class.article.php');
$cApiClient = new cApiClient($client);
$sSearchRange = $cApiClient->getProperty('searchrange', 'include');
$aSearchRange = explode(',', $sSearchRange);
// Get the search term
if (isset ($_POST['search_string'])) $searchterm = urldecode(strip_tags(htmlentities(stripslashes($_POST['search_string']))));
#Get all article specs
$sql = "SELECT
idartspec, artspec
FROM
".$cfg['tab']['art_spec']."
WHERE
client=$client AND
lang=$lang AND
online=1";
$db->query($sql);
$rows = $db->num_rows();
$aArtspecOnline = array ();
$aArtSpecs = array ();
$c = 1;
$d = 1;
$e = 1;
while ($db->next_record()) {
$aArtSpecs[] = $db->f('idartspec');
}
$aArtSpecs[] = 0;
$action = $sess->url('front_content.php');
// Do the search
if (strlen(trim($searchterm)) > 0) {
$searchterm = html_entity_decode($searchterm);
$options = array ( 'db' => 'regexp', // use db function regexp
'combine' => 'and', // combine searchterms with and
'exclude' => false, // => searchrange specified in 'cat_tree', 'categories' and 'articles' is excluded, otherwise included (exclusive)
'cat_tree' => $aSearchRange, // searchrange
'artspecs' => $aArtSpecs, // array of article specifications => search only articles with these artspecs
'protected' => true
); // => do not search articles or articles in categories which are offline or protected
$search = new Search($options);
$cms_options = array ("head", "html", "htmlhead", "htmltext", "text"); // search only in these cms-types
$search->setCmsOptions($cms_options);
$aSearchResults = $search->searchIndex($searchterm, '');
// We need our ul-Wrapper for prototype to work
echo '<ul>';
// Now we build our list
if (count($aSearchResults) > 0) {
// Get number of results
$oSearchResults = new SearchResult($aSearchResults, $number_of_results);
$num_res = $oSearchResults->getNumberOfResults();
$num_pages = $oSearchResults->getNumberOfPages();
$res_page = $oSearchResults->getSearchResultPage(1);
foreach ($res_page as $key => $val) {
// Read the article Results
$oArt = new Article($key, $client, $lang);
$aHeadline = $oSearchResults->getSearchContent($key, 'HTMLHEAD', 1);
$headline = capiStrTrimAfterWord($aHeadline[0], 200); # conflict with capiStrTrimAfterWord and setReplacement('<strong>', '</strong>')
$cat_id = $oSearchResults->getArtCat($key);
echo '<li><a href="front_content.php?idcat=' . $cat_id . '&idart=' . $key . '" title="' . $headline . '">' . $headline . '</a></li>';
}
} else {
echo '<li>Ihre Suche nach "' . $searchterm . '" hat keine Ergebnisse geliefert.</li>';
}
echo '</ul>';
}
?>
Code: Alles auswählen
<form action="front_content.php?idcat=1&idart=4" method="post" id="search">
<fieldset>
<input type="text" name="searchterm" value="Suchen" tabindex="1" onclick="javascript:emptyElement(this, 'Suchen')" id="livesearch_button" />
<span id="livesearch_indicator" style="display: none;"><img src="upload/layout/indicator.gif" alt="Searching" /></span>
</fieldset>
</form>
<div id="livesearch_results" class="livesearch_results"></div>
<script type="text/javascript">
new Ajax.Autocompleter("livesearch_button", "livesearch_results", "front_content.php?idart=5", {paramName: "search_string", indicator: "livesearch_indicator", minChars: 3});
</script>