PropertyFacet

Hallo zusammen,

ich versuche gerade mein erstes Plugin zu schreiben.

Ich möchte gern den PropertyFacets im Listing, deren Value Anzahl 1 ist und deren Title Label gleich dem Value Label sind, das BooleanFacetResult Template zuweisen.

Zum Starten habe ich mir das SwagAttributeFilter Plugin heruntergeladen.

Leider stehe ich gerade total auf dem Schlauch,

wie kann ich die zugewiesenen Templates in meinem Code listen ?

Muss ich an den Request ran ?

Ok, mit diesem Tutorial https://youtu.be/Wvc_zKOZoAc bin ich schon ein ganzes Stück weiter gekommen:

In der Bootstrap.php subscribe ich einen ‚Enlight_Controller_Action_PostDispatchSecure_Frontend_Listing‘ Dispatchevent mit 

der Methode ‚onActionPostDispatchFrondendListing‘.

In der Methode komme ich auch an die Facets ran:

public function onActionPostDispatchFrondendListing(Enlight_Event_EventArgs $args){
	$subject = $args->getSubject();
    $context = $this->get('shopware_storefront.context_service')->getShopContext();
    $criteria = $this->get('shopware_search.store_front_criteria_factory')->createListingCriteria($subject->Request(), $context);

    $requestCategoryId = $subject->Request()->getParam('sCategory');
    $categoryContent = Shopware()->Modules()->Categories()->sGetCategoryContent($requestCategoryId);

    $categoryId = $categoryContent['id'];

    $categoryArticles = Shopware()->Modules()->Articles()->sGetArticlesByCategory(
       $categoryId,
       $criteria
    );
    
    $facetFilter = $this->get('shopware_product_stream.facet_filter');
    $tmpfacets = $facetFilter->filter($categoryArticles['facets'], $criteria);
    $facets = $tmpfacets[0]->getFacetResults();

    foreach ($facets as $facet){
        if(count($facet->getValues())==1){
            $oF=$facet->getValues();
            if($facet->getLabel()==$oF[0]->getLabel()){
                $newFacet = new BooleanFacetResult(
                        $facet->getFacetName(),
                        "__".$facet->getFieldName()."__".$oF[0]->getId(),
                        $facet->isActive(),
                        $facet->getLabel(),
                        array(),
                        'frontend/listing/filter/facet-boolean.tpl'
                    );
                $newFacets[] = $newFacet;
            }else{
                $newFacets[]=$facet;
            }
        }else{
            $newFacets[]=$facet;
        }

    }
    $categoryArticles['facets'] = $newFacets;
    $subject->View()->assign($categoryArticles);
}

 

Beim Abschicken werden die ausgewählten Kriterien ignoriert.

Müssen die Conditions noch angepasst werden ?

 

Hallo Olsen!

Hast du mittlerweile eine Lösung für das Problem gefunden? Ich würde mich für einen Lösungsansatz interessieren.

Beste Grüße
Marius