Plugin Variable Global verfügbar machen

Hi all, 

 

ich habe ein Problem und hoffe ihr könnt mir helfen. 
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. 

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. 

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. 

Schon einmal vielen Dank für eure Hilfe. 

 

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);
    }

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

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


}

 

Subscribers/DaypaioSubscriber.php
 

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

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

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


    }

}

 

Resources/config.xml
 

            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.

 

Resources/views/frontend/daypaio/index.tpl
 

{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}

 

Resources/views/frontend/index/header.tpl
 

{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}

 

Controllers/Frontend/Daypaio.php
 

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;
    }
}

 

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);

    }

 

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

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

@simkli schrieb:

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

 

Hi erst mal vielen Dank für deine Hilfe, 

 

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

  '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');

    }



}

 

funktioniert leider nicht. 

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

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

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

 

aber so wei es aussieht wird das event gar nicht aufgerufen

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

Enlight_Controller_Action_PostDispatchSecure_Frontend 

"""
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
"""

 

 

Enlight_Controller_Action_PostDispatchSecure_Frontend_Daypaio
 

"""
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
"""

 

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

Vielen Dank dafür.

 

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);
    }


}