Danke für die schnelle Antwort. Mir scheint es auch so, dass hier ein Bug schuld ist.
Wir hatten folgendes Problem: Wir wollen im Backend andere Filterbezeichnungen haben als im Shop-Frontend inkl. Übersetzung
Meine Lösung:
-
Neues Übersetzbares Freitextfeld: “display_name” erstellt
-
Neuen Subscriber erstellt, der die Übersetzung des Freitextfeldes an den View hängt (siehe Code 1 )
-
frontend/listing/filter/_includes/filter-multi-selection.tpl angepasst um die Informationen für die Ausgabe zusammenzuführen (siehe Code 2 )
Code 1:
['onFilterLoaded'],
];
}
//Neue Übersetzung für die Eigenschafts-Facetten werden aus dem Translation-Model geladen
public function onFilterLoaded(\Enlight_Event_EventArgs $args)
{
$shopId = Shopware()->Shop()->getId();
/** @var \Shopware_Controllers_Backend_Customer $controller */
$controller = $args->getSubject();
/** @var Enlight_View_Default $view */
$view = $controller->View();
$transRepo = Shopware()->Models()->getRepository(Translation::class);
/** @var FacetResultInterface[] $assignedFacets */
$assignedFacets = $view->getAssign('facets');
$facetAlternateLabels = [];
foreach($assignedFacets as $facet) {
if ($facet->getFacetName() == 'property') {
/** @var FacetResultInterface[] $propertyFacets */
$propertyFacets = $facet->getFacetResults();
foreach ($propertyFacets as $propertyFacet) {
/** @var Attribute $coreAttributes */
$coreAttributes = $propertyFacet->getAttributes()['core'];
$optionId = $coreAttributes->get('optionID');
$alternateName = $coreAttributes->get('display_name');
$translation = $transRepo->findOneBy(['key' => $optionId, 'shopId' => $shopId]);
if ($translation) {
$translationText = unserialize($translation->getData());
if($translationText['__attribute_display_name']) {
$facetAlternateLabels[$optionId] = $translationText['__attribute_display_name'];
}else{
if($alternateName) {
$facetAlternateLabels[$optionId] = $alternateName;
}
}
}elseif($alternateName) {
$facetAlternateLabels[$optionId] = $alternateName;
}
}
}
}
$view->assign('translatedFacetLabels', $facetAlternateLabels);
}
Code 2:
{extends file="parent:frontend/listing/filter/_includes/filter-multi-selection.tpl"}
{block name="frontend_listing_filter_facet_multi_selection_title"}
{assign var="attributes" value=$facet->getAttributes()}
{if $attributes.core !== null && $attributes.core->get("optionID")}
{assign var="optionId" value=$attributes.core->get("optionID")}
{assign var="translatedLabel" value=$translatedFacetLabels[$optionId]}
{/if}
{capture name="facetName"}
{if $translatedLabel}{$translatedLabel}{else}{$facet->getLabel()|escape}{/if}
{/capture}
{$smarty.capture.facetName}
{/block}
Ich hoffe es hilft jemanden, vrmtl. hätte man auch “tiefer” eingreifen können, also in die Generierung der Facetten, aber dazu fehlen mir die Kenntnisse.