Jump to content
xt:Commerce Community Forum

Suche anpassen


Baskosehund

Recommended Posts

Das geht leider nicht übers Template, da muss man wie du schon richtig vermutet hast tiefer ran. War übrigens auch einer meiner ersten Kontakte mit Veyton, wo ich was gerne erweitert hätte.

Hoffe ich krieg noch alle Stellen zusammen, an denen ich was geändert hab (war übrigens noch in der 4.05er-Version).

Ach ja, noch eine Sache... ich weiß nicht, wie man sowas sinnvoll lösen kann, so dass es beim nächsten Update nicht überschrieben wird.

Also, du brauchst die Datei xtFramework/classes/class.search_query.php

Hier fügst du in Zeile 43 (in der Zeile nach dem "return $plugin_return_value;") folgendes ein:

$this->setSQL_TABLE("LEFT JOIN " . TABLE_MANUFACTURERS . " m ON (p.manufacturers_id = m.manufacturers_id)");

Dadurch erreichst du erstmal, dass die Hersteller auf die Produkte gejoint werden. Und dann musst du noch die Suchquery an sich anpassen:

$this->setSQL_WHERE("AND (pd.products_keywords LIKE '%".$keywords."%' or pd.products_name LIKE '%".$keywords."%' ".$sdesc.$desc.")");

wird zu

$this->setSQL_WHERE("AND (pd.products_keywords LIKE '%".$keywords."%' or pd.products_name LIKE '%".$keywords."%' or m.manufacturers_name LIKE '%".$keywords."%' ".$sdesc.$desc.")");

Ich hab die alte Suchquery einfach durch // auskommentiert, damit ich se auf jeden Fall noch hab. Alle Angaben selbstverständlich ohne Gewähr und ich hoffe, dass ich grad nichts vergessen hab.

Hoffe das hilft dir.

Gruß

Snirf

Link to comment
Share on other sites

Verabschiede dich gleich von der vorgehensweis irgendwas in den Datein direkt anzupassen, du hast in der search funktion min 3 Hookpoints über die du das mit nem kleinen Plugin lösen kannst. Schau dir mal die anderen Plugins im Shop an besonders die jeweilige xml Datei im Installordner des Plugins. Somit hast du dann keine Probleme mehr die Datein später mal zu aktualisieren.

Link to comment
Share on other sites

Ja, das ist richtig, dass das über die Hooks auch geht, aber leider gibt es ja zu so gut wie nix eine Dokumentation. Hab mich jetzt mal drangesetzt und eine eigene Merkliste programmiert, was auch an sich ganz gut ging, nur ist das leider ohne jegliche Dokumentation eine scheiß Arbeit. Und so wie es aussieht werden wir wohl auf die Dokumentation auch noch einige Zeit warten müssen.

Wenn ich jetzt ein Plugin dafür schreibe, was muss ich auf jeden Fall in den Header schreiben? Also auch wenn ich keine Codeteile kopieren, sondern alles selber schreibe?

Naja, man darf gespannt bleiben, wie es sich entwickelt. Habe leider nach wie vor das Gefühl, dass die Aussage mit den 2 Jahren eher ein Marketing-Gag gewesen ist. Vielmehr wird doch jetzt alles mit der heißen Nadel nachgestrickt.

Gruß

Snirf

Link to comment
Share on other sites

So, hab das mal als Plugin realisiert, ob es die beste Möglichkeit ist weiß ich nicht.

Ich hab mir einfach den Hook-Point "class.search_query.php:F_Keywords_top" geschnappt, dort führe ich den modifizierten Code aus der class.search_query.php aus und setze einen zusätzlichen Hook-Point (plugin.inw_manufacturer_search:afterJoin). Zusätzlich setze ich danach die Variable $plugin_return_value, damit der ursprüngliche Code aus der class.search_query.php nicht ausgeführt wird.

Schwachstelle an dem ganzen: Falls die Suchroutine später mal überarbeitet wird muss auch das Plugin angepasst werden, da hier nicht nur die zusätzlichen Zeilen eingefügt wurden, sondern alles aus der class.search_query.php.

Hab aber mit meinem derzeitigen Wissen keine andere Möglichkeit gesehen, da es zum einen nicht die Hook-Points an den richtigen Stellen gab und zum anderen schwierig ist, das Statement für die Suche dynamisch anzupassen. Was man sich noch überlegen könnte wäre, dass man den Query als Option im Adminbereich hinterlegt. Hätte natürlich den Nachteil, dass jedesmal eine zusätzliche DB-Anfrage benötigt wird.

Vielleicht mach ich das auch mal noch als zusätzliches Modul.

Naja, lange Rede kurzer Sinn, anbei mein Plugin (ohh... das reimt sich ;-))

Falls irgend welche rechtlichen Hinweise oder sonst irgend was fehlt bitte bescheid geben.

Gruß

Snirf

inw_manufacturer_search.zip

Link to comment
Share on other sites

  • 3 weeks later...

Hallo Snirf,

habe inzwischen deine Suche weiter ausgebaut, und auch Kategoriennamen z.B. mit einbezogen. Am liebsten würde ich jetzt die Ausgabe auch noch nach Kategoriennamen sortieren. Wie bekomme ich denn das "ORDER BY" in Abfrage. Meine Versuche diesbezüglich haben alle nicht funktioniert.

MfG

Baskosehund

Link to comment
Share on other sites

ist nicht sooo kompliziert, einfach


$this->setSQL_TABLE(" LEFT JOIN " . TABLE_PRODUCTS_TO_CATEGORIES . " ptc ON (p.products_id = ptc.products_id)");

$this->setSQL_WHERE(" AND ptc.master_link = '1' ");

$this->setSQL_TABLE(" LEFT JOIN " . TABLE_CATEGORIES_DESCRIPTION . " cd ON (ptc.categories_id = cd.categories_id)");

$this->setSQL_WHERE(" AND cd.language_code = 'de' ");

$this->setSQL_SORT(" cd.categories_name ");

Wie du siehst ist da noch der Language-Code hardkodiert drin, das kann man bestimmt noch irgendwie schön ändern.

Gruß

Snirf

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
  • Create New...