für Artikel-Eigenschaften wurde ein Freitextfeld hinterlegt mit dem Tabellenbezeichner “ew_test”. Die Spalte wurde auch korrekt in der s_filter_values_attributes Tabelle angelegt.
Im Template facet-value-list.tpl soll das Freitextfeld in der
{foreach $facet-\>getValues() as $option}
ausgelesen werden. Die Attributes sind pro Option protected, über
$option-\>getAttribute("core")
kommt man jedoch trotzdem heran. Das liefert einem ein Shopware\Bundle\StoreFrontBundle\Struct\Attribute Objekt. Dieses Objekt enthält im $storage die Freitextfelder, allerdings ist es auch protected. Es gibt eine public Getter-Methode, allerdings funktioniert dies nicht! Um genau zu sein: egal, welche (public) Methode des Objekts aus dem Template heraus aufgerufen wird (z.B. $option->getAttribute(“core”)->get(‘ew_test’) aber auch toArray() oder jsonSerialize()), kommt es zu einem 503 Server Fehler und das Rendern wird abgebrochen.
Ja klar funktioniert das, daher wundert es mich ja, dass es bei den Filtern nicht geht ;D
Merkwürdig ist schon, dass die Attributes protected sind im Vergleich zu anderen Objekten in Shopware. Die Getter sind aber ja vorhanden, nur funktionieren sie nicht :/
Eventuell kann mal jemand versuchen, meinen obigen Code in der foreach im genannten Template auszuführen (es müsste vorher ein Freitextfeld für die s_filter_values angelegt werden)? Dann könnte man zumindest mal einordnen, ob es an Shopware generell liegt oder ein spezifisches Problem bei uns ist.
Aber die sind ja bei meinem Beispiel oben auch protected. Kann das die Tage mal ausprobieren, aber grundsätzlich wüsste ich nicht, warum das nicht gehen sollte.
Hmm okay, also bei $option.attributes wurde auch nicht weitergerendert, da bin ich mir ziemlich sicher. Bin aber gerade auch nicht mehr im Büro, werde es morgen noch einmal probieren. Glaube aber nicht, dass es geht; hab sämtliche Zugriffe probiert und war schon froh, über den Getter dann wenigstens an den core-Eintrag zu kommen ;O
Danke soweit erstmal für deine Rückmeldung, ich melde mich morgen dann nochmal.
Also der Unterschied ist schon mal, dass $sBasketItem aus deinem Beispiel ein Array ist, $option aus meinem Beispiel ist ein Objekt vom Typ Shopware\Bundle\SearchBundle\FacetResult\MediaListItem und hier ist allein die Variable $attributes schon protected. So wie in deinem Beispiel kann man da also nicht drauf zugreifen. Beim $sBasketItem ist $attributes an sich ja nicht protected, sondern lediglich das storage-Array ist protected. Dafür gibt es ja die get-Methode, diese funktioniert aber wie beschrieben nicht bei den Filtern.
Wäre echt cool, wenn du (oder generell jemand) das mal ausprobieren könnte. Unser Kunde erwartet eine rasche Umsetzung und wir würden ungern den Weg über ein Widget gehen. Die Informationen sind ja da, man kommt nur ais irgendeinem Grund nicht heran
Okay, Fehler gefunden! Lag tatsächlich an uns. Ich war verwirrt, weil keine Fehlermeldungen ausgegeben wurden; im Error-Log von Vagrant hab ich dann aber was gefunden, nämlich dass $option->getAttribute(„core“) null war. Was auch logisch war, da natürlich nicht jeder Filterwert ein Attribut hat. Lösung war, vor der Ausgabe auf
if null !== $option->getAttribute('core')
zu prüfen.