querybuilder für suche

Hallo

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.

Viele Grüße

Guen

Hi,

da hilft dir schon die ProductAttributeCondition, musst also gar keinen Query schreiben, sondern nur die entsprechende Condition einbringen, vgl. SearchBundle

Daniel

1 „Gefällt mir“

Wow, danke für die schnelle Antwort, probiert ich gleich mal aus.

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

`s_articles_attributes`.suche = 1

hinzufügen.

Nur wo schreibe ich das rein?

Nein wie [@Daniel Nögel](http://forum.shopware.com/profile/4010/Daniel Nögel „Daniel Nögel“)‍ schon gesagt hast kannst du mir der ProductAttributeCondition arbeiten:

Für die Produktsuche gibt es das „Shopware_SearchBundle_Create_Search_Criteria“ Event in der StoreFrontCriteriaFactory. Da kannst du der Criteria eine neue Condition hinzufügen. Das wäre dann - wie gesagt - die ProductAttributeCondition.

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  Wink)

Viele Grüße

1 „Gefällt mir“

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! Gasp 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 Wink.

Viele Grüße

1 „Gefällt mir“

Vielen Dank simkli, es funktioniert!!

Somit habe ich eben mit deiner Hilfe mein erstes Plugin geschrieben Smile

Jetzt muss ich allerdings die Anpassung auch noch in der Live-Suche machen, dort hat das anscheinend keine Auswirkung.

Kannst du mir bitte nochmal einen Tipp geben, wo ich die finde?

 

EDIT: Ist das das Event Shopware_SearchBundle_Create_Ajax_Search_Criteria? Reicht es dann aus, wenn ich das Event noch einfach hinzufüge?

Nochmal Edit: gelöst Smile. Danke für Eure Hilfe Thumb-Up