ich hätte eine Frage. Wo findet man eigentlich den Querybuilder für die Suchfunktion von Shopware? Ich möchte dort noch einen zusätzlichen join einbringen, um eine Artikelkategorie mittels Abfrage eines Freitextfeldes in der Datenbank auszuschließen. Vielleicht hat dazu auch jemand Vorschläge.
da hilft dir schon die ProductAttributeCondition, musst also gar keinen Query schreiben, sondern nur die entsprechende Condition einbringen, vgl. SearchBundle
Komme damit nicht so klar. Ich habe in der Tabelle s_articles_attributes die Spalte suche. Die Shopwaresuche soll nur Artikel bei der Suche berücksichtigen, die dort eine 1 drin haben.
Ich müsste also einfach in der Shopsuche den Suchquery um einen
LEFT JOIN `s_articles_attributes` ON (`s_articles`.id = `s_articles_attributes`.articleId)
erweitern, damit die Attribute und Freitextfelder auch berücksichtigt werden, und dann die Condition
use Shopware\Bundle\SearchBundle\Condition\ProductAttributeCondition;
/* ... */
/* Event Listener Funktion */
public function onCreateSearchCriteria($args) {
$criteria = $args->get('criteria');
// hier fügen wir die Condition "Freitextfeld namens 'suche' muss den Wert 1 haben" hinzu
$criteria->addCondition(
new ProductAttributeCondition('suche',ProductAttributeCondition::OPERATOR_EQ,1)
);
}
(Code nicht getestet. Syntaxfehler ggf. ausbessern )
Funktioniert leider nicht. Die Suche findet immer noch alle Artikel.
Habe es erst so versucht, dass ich in der StoreFrontCriteriaFactory.php die use-Anweisung hinzügefügt habe und dann nach der function createSearchCriteria die neue function onCreateSearchCriteria eingefügt habe. Es kam keine Fehlermeldung, das Suchkriterium hat aber keine Auswirkung. Auch die Plugin-Variante klappt nicht.
Das Suchkriterium wird nicht ausgeführt. Woran könnte das liegen?
Nein du darfst auf keinen Fall die original Dateien bearbeiten! Du musst das in ein Plugin auslagern. Und die Eventlistener Funktion wird natürlich nicht aufgerufen, wenn du sie zuvor nicht auf das von mir genannten Event registrierst. Schau dir am besten mal die Anleitungen unter http://developers.shopware.com an. Speziell diese hier Shopware events .