# Plugin Variable Global verfügbar machen

**URL:** <https://forum.shopware.com/t/plugin-variable-global-verfugbar-machen/53979>\
**Category:** Themes & Design\
**Created:** [10. Juli 2018 um 08:53 UTC](https://forum.shopware.com/t/plugin-variable-global-verfugbar-machen/53979 "2018-07-10T08:53:51Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![danielmauer](https://avatars.discourse-cdn.com/v4/letter/d/bc8723/32.png) [@danielmauer](https://forum.shopware.com/u/danielmauer)\
**Post date:** [10. Juli 2018 um 08:53 UTC](https://forum.shopware.com/t/plugin-variable-global-verfugbar-machen/53979/1 "2018-07-10T08:53:51Z")

</div>

Hi all,&nbsp;

&nbsp;

ich habe ein Problem und hoffe ihr könnt mir helfen.&nbsp;  
Und zwar habe ich ein Plugin geschrieben welches die “frontend/indes/header.tpl” appended und um ein JavaScript erweitert. In diesem JavaScript muss jedoch eine Tracking ID aus der Plugin Config ausgelesen und eingesetzt werden.&nbsp;

Das ganze funktioniert auch schon wenn ich mich im frontend im Plugin namespace bewege. Dann bekomme ich meinen Header appended mit dem JS und der Tracking ID.  
Nun habe ich jedoch das Problem das wenn ich z.B. auf ein Produkt oder eine andere Seite im Shop gehe, welche nicht mehr den Namesapcae des Plugins besitzt ist zwar die appendede Header.tpl mit dem JS da, jedoch habe ich keinen Zugriff mehr auf die Config des Pluigins und somit den Variable in der die Tracking ID steht. Somit ist der Tracking Code nicht funktional und sinnlos.&nbsp;

Kann mir hier jemand sagen wo mein Fehler ist, wie kann ich die Tracking ID Global verfügbar machen?  
Anbei poste ich den Plugin Code in der Hoffnung das jemand meinen Fehler findet und mir helfen kann.&nbsp;

Schon einmal vielen Dank für eure Hilfe.&nbsp;

&nbsp;

**Daypaio.php**  
&nbsp;

```
 'onPreDispatch'
            //'Enlight_Controller_Action_PreDispatch_Frontend_Checkout' => 'onPreDispatch'
            'Enlight_Controller_Action_PostDispatch_Frontend' => 'onPostDispatch',
            'Enlight_Controller_Action_PreDispatch' => 'onPreDispatch'
        ];
    }

    public function onPostDispatch(\Enlight_Event_EventArgs $args)
    {
        /** @var \Shopware_Controllers_Frontend_RoutingDemonstration $subject */
        $controller = $args->getSubject();

        $controller->View()->addTemplateDir( __DIR__. '/Resources/views');
    }

    public function onPreDispatch(\Enlight_Event_EventArgs $args)
    {
        /** @var \Shopware_Controllers_Frontend_RoutingDemonstration $subject */
        $controller = $args->getSubject();

        $controller->View()->addTemplateDir( __DIR__. '/Resources/views');

        //$this->view->assign('tracking_id', $tracking_id);
    }

    public function install(InstallContext $context)
    {
        $context->scheduleClearCache(InstallContext::CACHE_LIST_DEFAULT);
    }

    public function uninstall(UninstallContext $context)
    {
        $context->scheduleClearCache(InstallContext::CACHE_LIST_DEFAULT);
    }

}

```

&nbsp;

**Subscribers/DaypaioSubscriber.php**  
&nbsp;

```
  'onPreDispatch',
            'Enlight_Controller_Action_PostDispatchSecure_Frontend' => 'onPreDispatch'
        ];
    }

    public function onPreDispatch(\Enlight_Event_EventArgs $args)
    {
        $controller = $args->getSubject();

        $controller->View()->addTemplateDir( __DIR__. '/../Resources/views');

    }

}

```

&nbsp;

**Resources/config.xml**  
&nbsp;

```
            access_token
            daypaio API Access Token
            daypaio API Access Token
            
            Tragen Sie hier den Access Token aus Ihrem daypaio Portal ein.
            Enter the access token from your daypaio portal here.
        

        
            tracking_id
            daypaio Tracking ID
            daypaio Tracking ID
            
            Tragen Sie hier die Tracking ID aus Ihrem daypaio Portal ein.
            Enter the tracking id from your daypaio portal here.

```

&nbsp;

**Resources/views/frontend/daypaio/index.tpl**  
&nbsp;

```
{extends file="parent:frontend/index/index.tpl"}

{block name='frontend_index_content' append}

    ich bin die {$currentAction}-action
{*
    
        {s name="GoToNextPage"}{/s}
    
*}

        Auth Token: {$authToken};
        Tracking ID: {$trackingId}
{/block}

```

&nbsp;

**Resources/views/frontend/index/header.tpl**  
&nbsp;

```
{extends file="parent:frontend/index/header.tpl"}

{block name="frontend_index_header_javascript_tracking" append}

    {literal}
        
            (function(w,d,sc,src,sy,scr,id){w['SYSObject']=sy;w[sy]=w[sy]||function(){
                (w[sy].q=w[sy].q||[]).push(arguments)},w[sy].l=1*new Date();scr=d.createElement(sc),
                id=d.getElementsByTagName(sc)[0];scr.async=0;scr.src=src;id.parentNode.insertBefore(scr,id)})
            (window,document,'script','https://data.getsystem.de/dc.js','sys');
            sys('init','{/literal}{$tracking_id}{literal}')
        
    {/literal}

{/block}

```

&nbsp;

**Controllers/Frontend/Daypaio.php**  
&nbsp;

```
view->addTemplateDir( __DIR__. '/../../Resources/views');
        $tracking_id = $this->getTrackingId();
        $this->view->assign('tracking_id', $tracking_id);

    }

    public function onPostDispatch()
    {
        $tracking_id = $this->getTrackingId();
        //$this->view->assign('tracking_id', $tracking_id);
    }

    public function indexAction(){
        $this->view->assign('nextAction', 'foo');

        // get the auth token from config
        $auth_token = $this->getAuthToken();
        $this->view->assign('authToken', $auth_token);

        // get the tracking id from config
        $tracking_id = $this->getTrackingId();
        $this->view->assign('trackingId', $tracking_id);
    }

    public function fooAction(){
        $this->view->assign('nextAction', 'index');
    }

    public function finishAction(){
        $this->view->assign('apiAction', 'index');
    }

    public function postDispatch()
    {
        $currentAction = $this->request()->getActionName();

        $this->view->assign('currentAction', $currentAction);

    }
    public function cartAction(){
        $this->view->assign('daypayio_action', 'cart');
    }

    /*
     * getAuthToken
     */
    private function getAuthToken()
    {
        $pluginConfig = $this->container->get('shopware.plugin.cached_config_reader')->getByPluginName('Daypaio');
        $authToken = $pluginConfig['access_token'];

        return $authToken;
    }

    /*
     * getTrackingId
     */
    private function getTrackingId()
    {
        $pluginConfig = $this->container->get('shopware.plugin.cached_config_reader')->getByPluginName('Daypaio');
        $trackingId = $pluginConfig['tracking_id'];

        return $trackingId;
    }
}

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![h\_lohaus](https://avatars.discourse-cdn.com/v4/letter/h/a587f6/32.png) [@h\_lohaus](https://forum.shopware.com/u/h_lohaus)\
**Post date:** [10. Juli 2018 um 09:04 UTC](https://forum.shopware.com/t/plugin-variable-global-verfugbar-machen/53979/2 "2018-07-10T09:04:37Z")

</div>

Hi,

statt im Controller machst du es einfach im PostDispatch. (Variable registrieren)

```
    public static function getSubscribedEvents()
    {
        return [
            'Enlight_Controller_Action_PostDispatchSecure_Frontend' => 'onPostDispatch'
        ];
    }

    public function onPostDispatch(\Enlight_Event_EventArgs $args)
    {
        $controller = $args->getSubject();

        $controller->View()->addTemplateDir( __DIR__. '/../Resources/views');

        $tracking_id = $this->getTrackingId();
        $controller->View()->assign('tracking_id', $tracking_id);

    }

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![danielmauer](https://avatars.discourse-cdn.com/v4/letter/d/bc8723/32.png) [@danielmauer](https://forum.shopware.com/u/danielmauer)\
**Post date:** [10. Juli 2018 um 09:22 UTC](https://forum.shopware.com/t/plugin-variable-global-verfugbar-machen/53979/3 "2018-07-10T09:22:03Z")

</div>

das funktioniert leider nicht. ich komme immernoch nur im daypaio namespace an die Variable&nbsp;

---

<div class="post-metadata">

**Author:** ![simkli](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/simkli/32/13124_2.png) [@simkli](https://forum.shopware.com/u/simkli)\
**Post date:** [10. Juli 2018 um 09:42 UTC](https://forum.shopware.com/t/plugin-variable-global-verfugbar-machen/53979/4 "2018-07-10T09:42:57Z")

</div>

Naja, es gibt ja auch kein $this-\>getTrackingId(); in deinem Subscriber.

Hast du das denn auch entsprechend angepasst und nicht einfach nur copy&paste gemacht?

Viele Grüße

---

<div class="post-metadata">

**Author:** ![danielmauer](https://avatars.discourse-cdn.com/v4/letter/d/bc8723/32.png) [@danielmauer](https://forum.shopware.com/u/danielmauer)\
**Post date:** [10. Juli 2018 um 10:01 UTC](https://forum.shopware.com/t/plugin-variable-global-verfugbar-machen/53979/5 "2018-07-10T10:01:32Z")

</div>

> [@simkli schrieb:](https://forum.shopware.com/profile/16741/simkli "simkli")
> 
> Naja, es gibt ja auch kein $this-\>getTrackingId(); in deinem Subscriber.
> 
> Hast du das denn auch entsprechend angepasst und nicht einfach nur copy&paste gemacht?
> 
> Viele Grüße

&nbsp;

Hi erst mal vielen Dank für deine Hilfe,&nbsp;

&nbsp;

ja ich habe einfach zum testen erst mal einen festen Wert hinein geschrieben  
&nbsp;

```
  'onPreDispatch',
            //'Enlight_Controller_Action_PostDispatchSecure_Frontend' => 'onPreDispatch'
            'Enlight_Controller_Action_PostDispatchSecure_Frontend' => 'onPostDispatch'
        ];
    }

    public function onPostDispatch(\Enlight_Event_EventArgs $args)
    {
        $controller = $args->getSubject();

        $controller->View()->addTemplateDir( __DIR__. '/../Resources/views');

        //$tracking_id = $this->getTrackingId();
        $controller->View()->assign('tracking_id', 'test234');

    }

    public function onPreDispatch(\Enlight_Event_EventArgs $args)
    {
        $controller = $args->getSubject();

        $controller->View()->addTemplateDir( __DIR__. '/../Resources/views');

    }

}

```

&nbsp;

funktioniert leider nicht.&nbsp;

du kannst dir das ganze auch live anschauen unter [https://shopware.daniel-mauer.de](https://shopware.daniel-mauer.de)

---

<div class="post-metadata">

**Author:** ![simkli](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/simkli/32/13124_2.png) [@simkli](https://forum.shopware.com/u/simkli)\
**Post date:** [10. Juli 2018 um 10:03 UTC](https://forum.shopware.com/t/plugin-variable-global-verfugbar-machen/53979/6 "2018-07-10T10:03:19Z")

</div>

Wird denn dein onPostDispatch-Event überhaupt ausgeführt?

Kannst du da mal ein die(“test”); reinschreieben um zu sehen, dass es ausgeführt wird?

Viele Grüße

---

<div class="post-metadata">

**Author:** ![danielmauer](https://avatars.discourse-cdn.com/v4/letter/d/bc8723/32.png) [@danielmauer](https://forum.shopware.com/u/danielmauer)\
**Post date:** [10. Juli 2018 um 10:09 UTC](https://forum.shopware.com/t/plugin-variable-global-verfugbar-machen/53979/7 "2018-07-10T10:09:03Z")

</div>

doofe Frage, wo genau soll ich das rein schreiben? sorry ih bin neu in shopware.

&nbsp;

aber so wei es aussieht wird das event gar nicht aufgerufen

---

<div class="post-metadata">

**Author:** ![danielmauer](https://avatars.discourse-cdn.com/v4/letter/d/bc8723/32.png) [@danielmauer](https://forum.shopware.com/u/danielmauer)\
**Post date:** [10. Juli 2018 um 10:15 UTC](https://forum.shopware.com/t/plugin-variable-global-verfugbar-machen/53979/8 "2018-07-10T10:15:53Z")

</div>

wenn ich mir die Events ausgeben lasse im Debugger schaut es so aus.

**Enlight\_Controller\_Action\_PostDispatchSecure\_Frontend&nbsp;**

```
"""
object(stdClass)#1564 (5) {\n
  [" __CLASS__"]=>\n
  string(34) "Enlight_Controller_ActionEventArgs"\n
  ["_processed"]=>\n
  bool(true)\n
  ["_name"]=>\n
  string(46) "Enlight_Controller_Action_PreDispatch_Frontend"\n
  ["_return"]=>\n
  NULL\n
  ["_elements"]=>\n
  array(3) {\n
    ["subject"]=>\n
    string(56) "Shopware_Proxies_ShopwareControllersFrontendDaypaioProxy"\n
    ["request"]=>\n
    string(38) "Enlight_Controller_Request_RequestHttp"\n
    ["response"]=>\n
    string(40) "Enlight_Controller_Response_ResponseHttp"\n
  }\n
}\n
"""

```

&nbsp;

&nbsp;

**Enlight\_Controller\_Action\_PostDispatchSecure\_Frontend\_Daypaio**  
&nbsp;

```
"""
object(stdClass)#1564 (5) {\n
  [" __CLASS__"]=>\n
  string(34) "Enlight_Controller_ActionEventArgs"\n
  ["_processed"]=>\n
  bool(true)\n
  ["_name"]=>\n
  string(46) "Enlight_Controller_Action_PreDispatch_Frontend"\n
  ["_return"]=>\n
  NULL\n
  ["_elements"]=>\n
  array(3) {\n
    ["subject"]=>\n
    string(56) "Shopware_Proxies_ShopwareControllersFrontendDaypaioProxy"\n
    ["request"]=>\n
    string(38) "Enlight_Controller_Request_RequestHttp"\n
    ["response"]=>\n
    string(40) "Enlight_Controller_Response_ResponseHttp"\n
  }\n
}\n
"""

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![danielmauer](https://avatars.discourse-cdn.com/v4/letter/d/bc8723/32.png) [@danielmauer](https://forum.shopware.com/u/danielmauer)\
**Post date:** [10. Juli 2018 um 14:26 UTC](https://forum.shopware.com/t/plugin-variable-global-verfugbar-machen/53979/9 "2018-07-10T14:26:49Z")

</div>

So Problem gelöst, dank deines EInwandes @simkli‍

Vielen Dank dafür.

&nbsp;

Hier für alle anderen die Lösung.  
**Daypaio/Daypaio.php**

```
 'onPreDispatch'
            //'Enlight_Controller_Action_PreDispatch_Frontend_Checkout' => 'onPreDispatch'
            //'Enlight_Controller_Action_PostDispatch_Frontend' => 'onPostDispatch',
            'Enlight_Controller_Action_PreDispatch' => 'onPreDispatch'
        ];
    }

    public function onPostDispatch(\Enlight_Event_EventArgs $args)
    {
        /** @var \Shopware_Controllers_Frontend_RoutingDemonstration $subject */
        $controller = $args->getSubject();

        $controller->View()->addTemplateDir( __DIR__. '/Resources/views');

    }

    public function onPreDispatch(\Enlight_Event_EventArgs $args)
    {
        /** @var \Shopware_Controllers_Frontend_RoutingDemonstration $subject */
        $controller = $args->getSubject();

        $controller->View()->addTemplateDir( __DIR__. '/Resources/views');

        //$this->view->assign('tracking_id', $tracking_id);

        $pluginConfig = $this->container->get('shopware.plugin.cached_config_reader')->getByPluginName('Daypaio');
        $trackingId = $pluginConfig['tracking_id'];

        $controller->View()->assign('tracking_id', $trackingId);
    }

    public function install(InstallContext $context)
    {
        $context->scheduleClearCache(InstallContext::CACHE_LIST_DEFAULT);
    }

    public function uninstall(UninstallContext $context)
    {
        $context->scheduleClearCache(InstallContext::CACHE_LIST_DEFAULT);
    }

}

```

&nbsp;
