Eigene Einkaufswelten Attribute: Wie kann ich in listing/listing.tpl darauf zugreifen

Hallo,

ich würde gerne mit einem eigenen Attribut in den Einkaufswelten einstellen, ob die EKW über oder unter dem Produktlisting angezeigt wird.
Dazu muss ich im Theme die Datei listing/listing.tpl ändern und muss auf das EKW Attribut zugreifen.

Laut diesem Post hier:
https://forum.shopware.com/discussion/39755/freitextfeld-fuer-einkaufswelt-s-emotion-attributes-verfuegbar-machen
sollte ich auf die eigenen Attribute über {$emotion.attribute.mein_attribut} zugreifen können.

In Smarty werden unter listing/listing.tpl allerdings keine Attribute für den $emotions Array angezeigt:

 

$emotions	Smarty_Variable Object (3)
->value = Array (1)
  0 => Array (7)
    id => "1"
    devices => "0,1,2,3,4"
    showListing => "1"
    fullscreen => "0"
    customer_stream_ids => null
    replacement => null
    devicesArray => Array (5)
      0 => "0"
      1 => "1"
      2 => "2"
      3 => "3"
      4 => "4"
->nocache = null
->scope = "snippet:frontend/listing/listing.tpl"

Wir kann ich auf mein eigenes Attribut zugreifen in listing/listing.tpl?

Danke und viele Grüsse,

Jens

In der listing.tpl kommst du da nicht dran. Die Einkaufswelt wird ja über ein Widget geladen und ist auch nur da mit Ihren Variablen verfügbar. Warum nutzt du dafür nicht einfach ein Kategorie-Attribut?

Ich möchte gerne in einer Kategorie mehrere Ekw verwenden, deren Position ich für jeweils einzeln festlegen möchte. Das wäre am saubersten über die Ekw Attribute zu machen.

Wie komme ich in meinem Plugin an die Ekw Attribute? Dann könnte ich sie einfach händisch über den View ausgeben.

Ich würde das so machen:

 

scheduleClearCache(ActivateContext::CACHE_LIST_DEFAULT);
    }
    public function deactivate(DeactivateContext $context)
    {
        $context->scheduleClearCache(DeactivateContext::CACHE_LIST_DEFAULT);
    }
    public static function getSubscribedEvents()
    {
        return [
            'Enlight_Controller_Action_PostDispatchSecure_Frontend_Listing' => 'onFrontendListing'
        ];
    }
    public function onFrontendListing(\Enlight_Event_EventArgs $args)
    {
        /** @var \Enlight_Controller_Action $controller */
        $controller = $args->get('subject');
        $view = $controller->View();

        $emotions = $view->getAssign('emotions');


        $service = $this->container->get('shopware_attribute.data_loader');

        $i = 0;
        foreach ($emotions as $emotion)
        {
            $attributes['attributes'] = $service->load('s_emotion_attributes', $emotion['id']);
            $emotions[$i] = $emotions[$i] + $attributes;
            $i++;
        }

        $view->assign('emotions', $emotions);
    }
}

Datei: /custom/plugins/MNAddEmotionAttributes/MNAddEmotionAttributes.php

1 Like

 

 

 

Danke Moritz,

werde das heute abend ausprobieren.

Gruss Jens

Funktioniert super. Vielen Dank!