Controller Action ersetzen (Eigene Suche)

Hallo zusammen,

ich stehe derzeit vor dem problem das ich eine Standard Action von Shopware5 ersetzen möchte leider funktioniert das nicht so wie gewünscht. Shopware bietet ja nur 2 Hooks an denen ich angreifen kann PreDispatch (vor Ausführung des Standard Shopware Codes) & PostDispatch (nach Ausführung des Standard Shopware Codes).
Post zu nutzen wär näturlich reichlich dumm da ich garnicht möchte das die Standard Action ausgeführt wird, weil das was dort gemacht wird unnötig ist und Performance kostet.

 

Dann hab ich noch das problem das die Filter anscheinend nicht vorgefiltert werden wie in der Standard Suche bei Shopware es werden mir einfach immer alle Filter Optionen angezeigt obwohl ich eine Ordernumber Condition nutze und die Artikel die Dargestellt werden definitiv nicht alle eigenschaften besitzen die dargestellt werden.

            $searchKey = 'sArticles';
            $searchResult = $helper->search()->doSearch($request->get('sSearch', ''));
            $view->loadTemplate('frontend/search/fuzzy.tpl');


            $context = $this->get('shopware_storefront.context_service')->getProductContext();
            $criteria = $this->get('shopware_search.store_front_criteria_factory')->createListingCriteria(
                $request,
                $context
            );

            $criteria->addCondition(new OrdernumberCondition($searchResult));
            $result = $this->get('shopware_search.product_search')->search(
                $criteria,
                $context
            );
            $products = $this->get('legacy_struct_converter')->convertListProductStructList(
                $result->getProducts()
            );

            $pageCounts = $this->get('config')->get('fuzzySearchSelectPerPage');

            $requestArray = $request->getParams();
            $requestArray['sSearchOrginal'] = $request->getParam('sSearch', '');

            $view->assign([
                'term' => $request->get('sSearch', ''),
                'showListing' => true,
                'ajaxCountUrlParams' => ['SwagSearchBundleCount' => 1],
                'criteria' => $criteria,
                'facets' => $result->getFacets(),
                'sSearchResults' => array(
                    'sArticles' => $products,
                    'sArticlesCount' => $result->getTotalCount()
                ),
                'sPerPage' => array_values(explode("|", $pageCounts)),
                'pageSizes' => array_values(explode("|", $pageCounts)),
                'shortParameters' => $this->get('query_alias_mapper')->getQueryAliases(),
                'sRequests' => $requestArray,
                'sSort' => $request->getParam('sSort')
            ]);

 

Gruß

Hi,

die Vorfilterung von “Filtern” basiert auf den “BaseConditions” die normalen “Conditions” sind Conditions welche sozusagen vom User getätigt werden und nicht für die Filter berücksichtigt werden.

Ruf einfach $criteria->addBaseCondition(new OrderNumber…) auf dann sind die Filter bereits eingeschränkt