Wir haben einige zusätzliche Suchkriterien (criteria) erstellt, die standardmäßig auf der Listen- und Suchseite verwendet werden sollten.
Wenn wir als Test den Core Controller / Action hacken und eines unserer zusätzlichen Kriterien hinzufügen, funktioniert das gut, aber keine großartige Lösung.
Was ist die beste Lösung, um die benutzerdefinierten Kriterien zusätzlich zu Aktionen wie Listing / Index hinzuzufügen?
mit dem CriteriaRequstHandler kannst du dein Condition-Objekt einfach hinzufügen: Elasticsearch development Hilft das schon weiter? Ansonsten einfach nochmal melden!
danke für den Link.
Wir haben den criteriaHandler-Code unten hinzugefügt und es scheint gut zu funktionieren.
namespace CustomPlugin\Bundle\SearchBundle;
use Enlight_Controller_Request_RequestHttp as Request;
use Shopware\Bundle\SearchBundle\Criteria;
use Shopware\Bundle\SearchBundle\CriteriaRequestHandlerInterface;
use Shopware\Bundle\StoreFrontBundle\Struct\ShopContextInterface;
use CustomPlugin\Bundle\SearchBundle\Condition\CustomCondition;
class CriteriaRequestHandler implements CriteriaRequestHandlerInterface
{
/**
* {@inheritdoc}
*/
public function handleRequest(
Request $request,
Criteria $criteria,
ShopContextInterface $context
) {
$criteria->addCondition(new CustomCondition([0]));
}
}
Wenn wir den Such-Handler nur in der Listing page, nicht in der SearchResults verwenden möchten; Würdest du empfehlen, im Handler einen Controller- / Aktionsnamencheck durchzuführen?
$actionName = $arguments->getRequest()->getActionName();
if ($actionName != 'listing') return;
ja das ist eine gute Idee. Allerdings solltest du dir den ControllerName aus dem Request holen und nicht den ActionName
Du solltest auch darauf achten, dass du den Widgets_Listing Controller berücksichtigst.