Übersetzungen der Freitextfelder (Eigenschaften) werden im Frontend ignoriert/nicht geladen

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:

  1. Neues Übersetzbares Freitextfeld: “display_name” erstellt

  2. Neuen Subscriber erstellt, der die Übersetzung des Freitextfeldes an den View hängt (siehe Code 1 )

  3. 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.

1 „Gefällt mir“