Eigene Filter / Attribute

Hallo Benjamin, danke für deine Info. Dein Beispiel ist ja in Verbindung mit einem Min und Max Wert. Bei mir ist es so, dass ich nur einen Zahlenwert habe, und ich immer alle Artikel welche größergleich sind möchte. foreach ($attribute as $key=\>$attr) { if ($request-\>has($key)) { $params = $request-\>getParams(); $searchParams = explode('|', $params[$key]); if ($key == 'attr15') { $criteria-\>addCondition( new ProductAttributeCondition( $key, ProductAttributeCondition::OPERATOR\_GTE, $searchParams ) ); } else { $criteria-\>addCondition( new ProductAttributeCondition( $key, ProductAttributeCondition::OPERATOR\_IN, $searchParams ) ); } } $criteria-\>addFacet(new ProductAttributeFacet( $key, //attribute field ProductAttributeFacet::MODE\_VALUE\_LIST\_RESULT, //filter facet $key, //form name $attr //filter label )); } Hast du das auch mal probiert? Ich probiere im Gegenzug mal deinen Code, obwohl ich keinen Slider will, sondern ein LIST. Danke dir.

Hallo ottscho, ich verstehe noch nicht ganz was du mit deinem Code erreichen willst. Du iterierst über sämtliche Attribute und legst dort jeweils eine Facet an, für attr15 gibt es dann noch einmal eine Außnahme… Bitte beschreibe doch mal unabhängig vom Code wie deine Daten aussehen und was du erreichen möchtest. Viele Grüße, Benjamin :shopware:

ja genau, ich habe mehrere Attribute welche alle mit dem Operator IN laufen, außer attr15. Dieses soll mit größergleich laufen. Hier der Inhalt von $attribute: array(27) { [„attr7“]=> string(6) „Breite“ [„attr8“]=> string(5) „Höhe“ [„attr3“]=> string(6) „Bauart“ [„attr9“]=> string(5) „Felge“ [„attr15“]=> string(6) „GESCHW“ } Die Attribut Filter Breite bis felge funktionieren einwandfrei. Der Filter GESCHW funktioniert alleine auch. Aber sobald ich einen 2. Filter dazu auswähle wird dieser nicht übernommen. foreach ($attribute as $key=\>$attr) { if ($request-\>has($key)) { $param = $request-\>getParam($key); $searchParams = explode('|', $param); if ($key == 'attr15') { $criteria-\>addCondition( new ProductAttributeCondition( $key, ProductAttributeCondition::OPERATOR\_GTE, $param ) ); } else { $criteria-\>addCondition( new ProductAttributeCondition( $key, ProductAttributeCondition::OPERATOR\_IN, $searchParams ) ); } } $criteria-\>addFacet(new ProductAttributeFacet( $key, //attribute field ProductAttributeFacet::MODE\_RADIO\_LIST\_RESULT, //filter facet $key, //form name $attr //filter label )); } Schau mal hier: http://demoshop1.ottscho1.timmeserver.de/reifen/ Ruft du die URL direkt mir Paramater auf: http://demoshop1.ottscho1.timmeserver.d … attr15=240 So wird dieser gesetzt. Wenn du nun noch die Breite dazu wählst, wird der Geschwindigkeitsparameter nicht übernommen, da dieser nicht auf checked gesetzt ist.

Benjamin, konntest du es dir noch mal anschauen?

*push* wäre echt wichtig Hier wäre der link zum Shop: agadon.com Danke :shopware:

[quote=“Mario Fehr”]*push* wäre echt wichtig Hier wäre der link zum Shop: agadon.com Danke :shopware:[/quote] Guten Tag Mario, besteht das Problem noch? Wenn ja könntest du ein Ticket unter jira.shopware.de anlegen? Gruß, Simon Bäumer

Hallo Community, da ich, wie vorgeschlagen, mit dem Ticket bei jira.shopware.de nicht weitergekommen bin. Melde ich mich hier nochmal. Ich habe das attribute example Plugin verwendet und die CriteriaRequestHandler.php angepasst: [code]<?php namespace ShopwarePlugins\SwagAttributeFilter;
use Enlight_Controller_Request_RequestHttp as Request;
use Shopware\Bundle\SearchBundle\Condition\ProductAttributeCondition;
use Shopware\Bundle\SearchBundle\Criteria;
use Shopware\Bundle\SearchBundle\CriteriaRequestHandlerInterface;
use Shopware\Bundle\SearchBundle\Facet\ProductAttributeFacet;
use Shopware\Bundle\StoreFrontBundle\Struct\ShopContextInterface;

class CriteriaRequestHandler implements CriteriaRequestHandlerInterface
{
public function handleRequest(
Request $request,
Criteria $criteria,
ShopContextInterface $context
) {
if ($request->has(‚minproductAttributesForm‘)) { $param = $request->getParam(‚minproductAttributesForm‘); $criteria->addCondition( new ProductAttributeCondition( ‚attr10‘, ProductAttributeCondition::OPERATOR_GTE, $param ) ); } if ($request->has(‚maxproductAttributesForm‘)) { $param = $request->getParam(‚maxproductAttributesForm‘); $criteria->addCondition( new ProductAttributeCondition( ‚attr10‘, ProductAttributeCondition::OPERATOR_LTE, $param ) ); } $criteria->addFacet(new ProductAttributeFacet( ‚attr10‘, ProductAttributeFacet::MODE_RANGE_RESULT, ‚productAttributesForm‘, ‚Leistung‘ )); } }[/code] Ich hab das Plugin heute deinstalliert und nochmal neu installiert. Nun bewegt sich der Range Slider überhaupt, ansonsten hatte ich die Fehler siehe weiter oben. Ich hätte gerne auch noch ein Feedback was ich beim Ticket falsch gemacht habe. Danke

Hallo Zusammen! Ich habe hierzu mal eine andere Frage. So wie ich das sehe, kann man mit diesem Beispielplugin zusätzlich im Frontend filtern, wenn bei Artikeln ein Wert für das entsprechende Artikel-Attribut hinterlegt ist. Sagen wir attr1 hat “Haus” oder “Garten” als Wert. Soweit geht das ja. Wie sieht das aus, wenn ich einen Artikel habe, der bei “Haus” und “Garten” gefiltert werden soll? Ich habe versucht das über die Pipe zu lösen (attr1 = “Haus|Garten”), da ich es so im Plugin-Code gesehen hatte. Funktioniert allerdings nicht. Der Shop legt dann einen Filterwert “Haus|Garten” an, anstatt einen “Haus” und einen “Garten”. Auch mit Komma oder Leerzeichen klappt es nicht. Ich vermute mal, man muss an anderer Stelle etwas anpassen. Jemand eine Idee wie man das löst, oder sehe ich nur die Lösung nicht? Grüße DeTi

*push*

 

Hallo,

ich habe gerade den CriteriaRequestHandler Code angepasst (von Mario Fehr).

has('minleistung') || $request->getParam('maxleistung')) {
            $parammin = $request->getParam('minleistung');
            $parammax = $request->getParam('maxleistung');
            $criteria->addCondition(
                new ProductAttributeCondition(
                    'attr10',
                    ProductAttributeCondition::OPERATOR_BETWEEN,
                    array('min'=>$parammin, 'max'=>$parammax)
                )
            );
        }

 
        $criteria->addFacet(new ProductAttributeFacet(
            'attr10',
            ProductAttributeFacet::MODE_RANGE_RESULT,
            'leistung',
            'Leistung',
            'frontend/listing/filter/facet-leistung.tpl'
        ));
    }
}

Das Problem liegt daran, dass der max und min-Parameter nicht getrennt mitgegeben werden müssen, sonder zusammen als Array. Der Operator ist dan OPERATOR_BETWEEN. Somit sparst du dir auch die sepperate Abfrage ob max/min gesetzt ist. Zudem habe ich noch ein eigenes Template angegeben, damit ich dem Leistungsregler “Watt” anhängen kann, siehe: http://screenshots.ideefix.eu/2016-02-03_1531.png

 

Hey Zusammen,

da das Beispielplugin anscheinend im Zuge des neuen Forums hier als Anhang abhanden gekommen ist liegt kann dieses jederzeit über Github bezogen:
https://github.com/shopware/devdocs/tree/master/exampleplugins/Frontend/SwagAttributeFilter

Grüße,
Simon

1 Like

Ich habe hier immer noch ein Problem mit dem OPERATOR_GT.
Das Beispiel von Simon wurde abgeändert.

 

if ($request->has('productAttributesForm')) {
	$params = $request->getParams();
	$searchParams = explode('|', $params['productAttributesForm']);

	$criteria->addCondition(
		new ProductAttributeCondition(
			'attr5',
			ProductAttributeCondition::OPERATOR_GT,
			(int)$params['productAttributesForm']
		)
	);
}

$criteria->addFacet(new ProductAttributeFacet(
	'attr5', //attribute field
	ProductAttributeFacet::MODE_RADIO_LIST_RESULT, //filter facet
	'productAttributesForm', //form name
	'attributes' //filter label
));

 

Der Filter funktioniert und macht das was er will. Zeige ich mir aber die Artikel-Ergebnisse an, so wird der Filter wohl nicht korrekt übergeben.

Bei den aktiven Filter steht dieser nun, aber die Auswahlbox ist nicht mit meiner Selektion vordefiniert. In der URL steht aber mein Parameter.
Das Ganz hat zu folge, das bei einer neuen Filterung mein Filter nicht mehr berücksichtig wird.

Hat dazu jemand eine Idee? Wo liegt der Fehler?

Danke
Gruß
Ottscho

Ich muss hier noch mal hoch schieben…

@shopware‍

Könnt ihr dies bitte noch mal anschauen? Ich bin mir ziemlich sicher, dass der OPERATOR_GT nicht richtig funktioniert.

Der Wert wird nach dem Filter nicht übernommen!

 

 

 

Diese Filterung geht! Klickt man nun auf Produkte anzeigen passt soweit auch alles und es werden nur noch die korrekten Artikel angezeigt. Klicke ich jetzt aber einen Eigenschaften Filter dazu, so wird mein Filter wieder entfernt / gelöscht!

 

Hallo allerseits,

das Plugin von Github hat geholfen - danke!

In welcher Datei kann ich den Hersteller-Filter ausbauen? Ich habe nur zwei Hersteller im Sortiment, so dass diese Filtermöglichkeit keinen Sinn macht. 

Ich habe in frontend/listing/ schon alles durchsucht, jedoch keinen Verweis gefunden, der auf den Hersteller-Filter verweist.

Wer weiß was? :slight_smile:

Danke

@dobrock schrieb:

In welcher Datei kann ich den Hersteller-Filter ausbauen? Ich habe nur zwei Hersteller im Sortiment, so dass diese Filtermöglichkeit keinen Sinn macht.

Der Hersteller-Filter ist erstmal ein Standardfilter und hat afaik nichts mit diesem Plugin zu tun (?)

Deaktivieren sollte deshalb über das Backend möglich sein: Einstellungen -> Cache/Performance -> Einstellungen -> Allgemein -> Filter -> Hersteller Filter anzeigen

 

1 Like