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

Hallo Community,

leider habe ich dazu im Forum keine Antwort gefunden…

Ich habe in meinem Plugin ein übersetzbares Attribut für Eigenschaften (Gruppe) erstellt:

    $service->update ( 's_filter_options_attributes', 'ust_filter_descr', 'string', [ 
        'label' => 'Infotext',
        'displayInBackend' => true,
        'position' => 1,
        'translatable' => true
    ] );

Damit kann ich im Backend bei den Gruppen der Eigenschaften sowohl den Standartwert (Hauptshop) als auch eine englische Übersetzung (englischer Sprachshop) über den Globus-Icon eingeben. Beides wird korrekt(soweit ich es beurteilen kann) gespeichert.

Im Frontend kann ich den Wert meines Freitextfeldes mit:

{$facet->getAttribute('core')->get('ust_filter_descr')}

ausgeben. Leider kommt in allen Sprachshops immer der Wert, der für den Hauptshop eingetragen wurde. Die Übersetzungen werden also nie geladen.

Die Übersetzungen der Eigenschaften werden dagegen korrekt, je nach Subshop angezeigt.

Wenn ich nur für meinen Freitextfeld eine Übersetzung angebe und den Wert für den Hauptshop leer lasse, dann wird im Frontend garnichts angezeigt.

Ist da ein Bug im Shopware? Gibt es dafür eine Lösung?

Liebe Grüße,

Nikolaj Ruppert

Ich stoße auf das gleiche Problem - Hat jemand inzwischen eine Lösung dazu gefunden?

Meine Lösung war damals pro Sprache/Sprachshop eine Eigenschaft anzulegen. Also im Beispiel von oben “ust_filter_descr_de” und “ust_filter_descr_en” anzulengen und im Frontend dann den Shop abfragen, und je nach Shop die deutsche oder englische Meldung anzeigen.

Ist sehr unschön, schon klar. Ich glaube hier ist wirklich ein Bug…

Viel Erfolg…

1 „Gefällt mir“

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“