Variablen aus Plugin Konfiguration in Einkaufswelten Element nutzen

Hallo,

wie gesagt versuche ich gerade ein Plugin zu erstellen, dass unter anderem auch ein Widget für die Einkaufswelten bereitstellt. In dem Widget würde ich gerne auf die Variablen aus der Plugin-konfiguration (Backend->Pluginmanager) zugreifen.

Auszug aus der Bootstrap.php:

$this->subscribeEvent(
           'Shopware_Controllers_Widgets_Emotion_AddElement',
           'onEmotionAddElement'
        );


public function onEmotionAddElement(Enlight_Event_EventArgs $arguments)
    {
        $controller = $arguments->getSubject();
        $config = $this->Config();
        $view = $controller->View();
        $request = $controller->Request();
         
        if ($request->getControllerName() !== 'index'
            || $request->getModuleName() !== 'frontend'
            || !$view->hasTemplate()) {
            return;
        }
    
        $view->addTemplateDir($this->Path() . 'Views/');
        $view->assign('meineVariable', $this->Config()->get('meineVariable'));
    }

Wenn ich nun versuche die Variable in den Einkaufswelten auszugeben z.B:

     {$meineVariable} 

passiert garnichts… Die Einkaufswelten Elemente greifen ja eigentlich auf das $Data Array zu, muss/kann ich in der Bootstrap meine Variablen dem $Data Array zuweisen?

Hier die Lösung falls mal jemand beim suchen drüber stolpert:

http://forum.shopware.com/discussion/25047/artikel-durch-artikelnummer-in-einkaufswelt-plugin-einbinden/#Comment_109764

Danke an @t2oh4e‍ !

So hängt man die eigenen Variablen aus der Plugin Konfiguration ans $Data Array:

$this->subscribeEvent(
           'Shopware_Controllers_Widgets_Emotion_AddElement',
           'onEmotionAddElement'
        );

public function onEmotionAddElement(Enlight_Event_EventArgs $arguments)
    {
        $controller = $arguments->getSubject();
        $config = $this->Config();
        $view = $controller->View();

        // das $Data Array
        $data = $arguments->getReturn();
               
        $view->addTemplateDir($this->Path() . 'Views/');
        $data['meineVariable'] = $config->meineVariable;
        return $data;
        
    }

Im Emotion Templates des Widgets kann man dann über:

{$Data.meineVariable}

darauf zugreifen.

1 Like

Schön, dass alte Beiträge helfen. Und schön, dass du die Lösung nochmal rein geschrieben hast.  Thumb-Up

Super… genau danach habe ich gesucht. Top Antwort. Vielen Dank auch für das mitteilen der Lösung!  Thumb-Up

Hast du eventuell auch eine Lösung dafür, dass die Elemente nach der Neuinstallation nicht in der Einkaufswelt verschwinden? Hast ja vermutlich ähnliche Anforderungen gehabt wie ich.

Der einfachste Weg ist hier die Dateien im Pluginordner einfach zu überschreiben und dann ohne Neuinstallation Cache leeren / Themes neu kompilieren. So bleiben die Elemente erhalten.

Der elegantere Weg wäre dein Plugin zu versionieren damit man über den Pluginmanager updaten kann.