Per Plugin den SQL Select der Suche verändern (Hook/Dekorieren)

Hallo

wie schaffe ich es per Hook oder gehts auch über Dekorieren den Select den die Function „buildQuery“ in „\engine\Shopware\Bundle\SearchBundleDBAL\SearchTerm\SearchTermQueryBuilder.php“ erstellt zu erweitern.

Versuche mich schon den ganzen Tag daran und werde aus den vorhandenen Docs leider nicht schlauer

Shopware events und Plugin quick Startup Guide habe ich mir bereits angeschaut und auch die Beispiele geladen.

 

Ziel ist es, dass ich der Suche einen weiteren Parameter übergebe über welchen ich dann die Artikel eingrenzen möchte auf welche die Suche angewendet wird. Es existiert also schon eine Datenbank die aussagt welche Artikel zu diesem Parameter passend sind.

Du suchst: Service extensions

Viele Grüße

1 „Gefällt mir“

Vielen Dank.

Jetzt bin ich offensichtlich schon mal einen Schritt weiter. Mir wird allerdings nicht ganz klar wie ich nun die Funktion „buildQuery“ erweitern kann ohne die Funktion vollständig zu kopieren, bzw ich möchte ja ledigleich „$query“ innerhalb der Funktion verändern.

Die Funktion gibt den Query zurück. Du hast hier ein Interface, lässt also auf einen Service schließen.

Folglich: Von SearchTermQueryBuilder ableiten und parent aufrufen:

class MySearchTermQueryBuilder extends Shopware\Bundle\SearchBundleDBAL\SearchTerm\SearchTermQueryBuilder
{
    public function buildQuery($term)
    {
       $query = parent::buildQuery($term);
       $query->select(...);

       return $query;
    }
}

Dann irgendwo in Deinem Plugin den Service ersetzen:

$this->container->set('shopware_searchdbal.search_query_builder_dbal', new MySearchTermQueryBuilder());

Mehr Infos zum Ersetzen siehe Doku: Service extensions

1 „Gefällt mir“

Vielen Dank. Jetzt komme ich weiter.