Suchfunktion: Treffer nur bei exakter Überienstimmung anzeigen

Hallo Leute,

ich versuche die Suchfunktion so umzubauen, dass Treffer nur bei exakter Übereinstimmung des Suchbegriffes mit der Artikelnummer (oxartnum) oder alternativ dem Suchtag (oxtags) angezeigt werden.

Beispiel für Sollzustand:
Artikelnummer ist "12345"
Fall1: Suchebegriff: “123” -> kein Treffer
Fall2: Suchbegriff: “123456” -> kein Treffer
Fall3: Suchbegriff: 12345 -> Treffer

Problem ist, dass bei Fall1 momentan auch Treffer angezeigt werden. Ich hatte versucht in oxsearch.php ab Zeile 260 dem SearchString standardmäßig Anführungszeichen zu verpassen, allerdings scheint der Suchalgorythmus keinen Unterschied zwischen Suchbegriff mit/ohne Anführungszeichen zu machen.

Hat jemand eine Idee?

Besten Dank & Grüße!
Chris


Oxid eshop Version 4.8.1 / PHP 5.4.22

Hallo Leute,

ich poste mal die meine Lösung, vielleicht ist es für jemand anderen noch mal relevant:

In oxsearch.php Zeile 297

$sSearch .= " {$sSearchField} like ".$oDb->quote( “%$sSearchString%” );

muss geändert werden in

$sSearch .= " {$sSearchField} like ".$oDb->quote( “$sSearchString” );

In Zeile 301 wird

$sSearch .= " or {$sSearchField} like ".$oDb->quote( “%$sUml%” );

geändert in

$sSearch .= " or {$sSearchField} like ".$oDb->quote( “$sUml” )

Am besten per Modul, da ich selber PHP Neuling bin ohne Gewähr, bei mir funzt es aber ;-).

Hallo @chris1941,

das sieht doch gar nicht schlecht aus. Schau mal, ich glaub, die Funktion in der oxsearch kannst Du einfach mit eigener Funktionalität überschreiben, um ein Modul draus zu machen:
http://www.marco-steinhaeuser.de/how-to-write-a-module-for-oxid-eshop-display-you-will-save-x-percent-on-the-product-details-page.html

Gruß

Alles klar, danke für die Info!!

Viele Grüße,
Christian

kennst du schon das autosuggest modul … ist vlt auch eine idee für dich!

Nee, kenne ich nicht aber werde ich mir mal anschauen. Im Moment funktioniert die Suche allerdings genauso wie ich das wollte, von daher alles Bestens! Trotzdem Danke für den Tipp!!

Schön dass du die Lösung gefunden hast, aber du brauchst nun wirklich keinen LIKE Query machen - bitte mit einem ist gleich. Das dürfte dann 3 mal schneller laufen:

[I]In oxsearch.php Zeile 297

$sSearch .= " {$sSearchField} like ".$oDb->quote( “%$sSearchString%” );

muss geändert werden in

$sSearch .= " {$sSearchField} = ".$oDb->quote( “$sSearchString” );

In Zeile 301 wird

$sSearch .= " or {$sSearchField} like ".$oDb->quote( “%$sUml%” );

geändert in

$sSearch .= " or {$sSearchField} = ".$oDb->quote( “$sUml” )[/I]