Bei xtc-load.de ist eine praktische Erweiterung für die xt:Commerce-Suche zu finden:
» Ajax SearchSuggest - Nach erfolgreicher Installation werden dem “Suchenden” je nach den bereits eingegebenen Buchstaben passende Artikel vorgeschlagen.

Das Ding läuft soweit ganz ordentlich, aber drei Änderungen möchte ich empfehlen:


1. JavaScript auslagern

Im Installations-Paket wird eine Datei “general.js.php” mitgeliefert. Um deren Inhalt soll die Original “general.js.php” ergänzt werden.

Das gefällt mir nicht so - immerhin wird dadurch der Header-Bereich um (unnötige) 100 Zeilen aufgebläht. Mein Vorschlag:

  • Datei umbenennen in “AjaxSuggest.js”
  • Folgendes entfernen: Alles, was zwischen <?php und ?> steht (es sollten 16 Zeilen sein)
  • Dieses <script type="text/javascript"><!– (recht weit am Anfang) und dieses //–></script> (ganz am Ende) muss ebenfalls weg
  • Die neue “AjaxSuggest.js” in den Ordner “javascript” des aktiven Templates hochladen
  • Das Script dann aus der “general.js.php” heraus einbinden*

*in dem Fall müsste der Code dazu in etwa so aussehen:


<script type="text/javascript" src="<?php echo 'templates/'.CURRENT_TEMPLATE; ?>/javascript/AjaxSuggest.js"></script>
	


2. Mehrsprachigkeit beachten

Zusätzlich zu den vorgeschlagenen Artikelnamen wird deren Kategorie im Ajax-Fenster ausgegeben. Bei den Artikelnamen passt alles, bei den Kategorienamen jedoch fehlt in der Datenbank-Abfrage der Abgleich mit der aktuell eingestellten Sprache.

Also nehmen wir uns die Datei “searchSuggest.php” und fügen an den passenden Stellen nach dem “WHERE”-Statement (es sind zwei) Folgendes ein:

AND cd.language_id = '".(int) $_SESSION['languages_id']."'


3. Suchmaschinenfreundliche URLs beachten

Beispiel “ShopStat”: Auf der Startseite funktioniert noch alles prima. Man gibt ein “e” ein, erhält ein paar Vorschläge, klickt einen davon an - und man landet auf der “advanced_search_result.php” mit entsprechendem Suchwort.

Befindet man sich aber in der Kategorie “Herren”/”Schuhe”- dann erhält man (zumindest im Internet-Explorer) bei Klick auf einen der Vorschläge nicht ganz so schöne 404er-Meldungen, denn es wird folgende Seite angesteuert:

http://www.MeinShop.de/Herren/Schuhe/advanced_search_result.php?keywords=E-Irgendwas

Diese Seite gibt’s natürlich nicht - Ich nehme an, mit den anderen gängigen Tools (z.B. DirectURL) wird das Ergebnis ähnlich sein - Daher müssen wir etwas tun: Wir greifen uns unsere “AjaxSuggest.js” und ersetzen (ganz am Ende) dieses …

top.location.href = "advanced_search_result.php?keywords=" + produktname;

… hiermit:


top.location.href = document.location.protocol + '//' + window.location.host + "/advanced_search_result.php?keywords=" + produktname;
	

Nun müsste alles korrekt funktionieren.

An dieser Stelle einen Dank an Speedy aus dem xtcModified-Forum, der mich auf diese “Macke” aufmerksam gemacht hat.

 

P.S.: Es könnte sein, dass die Suchvorschläge weiterhin Ärger machen, wenn der Shop in einem “Unterverzeichnis” geparkt ist. Eventuell ist es dann schlauer, in der “general.js.php” eine globale JS-Variable mit diesem Verzeichnis festzulegen - und die “Shop-Adresse” in der “AjaxSuggest.js” ggf. damit zusammenzubauen.