Eigener Widget Controller wirft plötzlich Fehler

Hi zusammen,

ich habe schon seit ein paar Shopware Versionen bis hin zur aktuellsten Version ein von mir geschriebenes Widget als action in einem Template eingefügt. Das Ding macht nichts Anderes, als eine bestimmte Kategorie zu vergleichen und dann im Anschluss an dieser Stelle ein Template auszugeben. Jetzt kommts leider in in letzter Zeit immer häufiger vor, dass die Pagination bzw. das infinite loading nicht mehr funktioniert und folgender Fehler im Log auftaucht:

 

Stack trace:
#0 /html/shopware/var/cache/production_201710241020/templates/frontend_Meinestruempfe_de_DE_1_secure/4e/be/96/4ebe9627ca1a33d7194ba3405499a699228a5b83.snippet.box-minimal.tpl.php(117): content_5a1e7e828a8906_35837246(Object(Enlight_Template_Default))
#1 /html/shopware/engine/Library/Smarty/sysplugins/smarty_internal_templatebase.php(180): content_5a1e7e829af3e6_05469995(Object(Enlight_Template_Default))
#2 /html/shopware/engine/Library/Smarty/sysplugins/smarty_internal_template.php(286): Smarty_Internal_TemplateBase->fetch(Object(Enlight_Template_Default), NULL, NULL, NULL, false, false, true)
#3 /html/shopware/var/cache/production_201710241020/templates/frontend_Meinestruempfe_de_DE_1_secure/a0/99/b7/a099b786141a7c0cc59c7b60239b63201a274381.snippet.lis in /html/shopware/var/cache/production_201710241020/templates/frontend_Meinestruempfe_de_DE_1_secure/4e/be/96/4ebe9627ca1a33d7194ba3405499a699228a5b83.snippet.box-minimal.tpl.php on line 294
[29-Nov-2017 14:29:13 Europe/Berlin] PHP Fatal error: Uncaught Error: Call to a member function renderEsiTag() on null in /html/shopware/var/cache/production_201710241020/templates/frontend_Meinestruempfe_de_DE_1_secure/4e/be/96/4ebe9627ca1a33d7194ba3405499a699228a5b83.snippet.box-minimal.tpl.php:294

 

Hat sich denn in der Einbindung der Widgets im Hinblick auf das Update von 5.2 auf 5.3 irgendwas entscheidendes geändert, dass der Fehler jetzt plötzlich auftaucht?

Meine Bootstrap.php sieht wie folgt aus:

 

 $this->getVersion(),
        'label' => $this->getLabel(),
        'author' => 'Dreamride / Christian Bernhard',
        'supplier' => 'Christian Bernhard',
        'description' => 'Findet alle Kategorien zu einem Artikel',
        'support' => 'Hersteller',
        'link' => 'http://www.dreamride.de'
      );
    } 

    /**
     * Get (nice) name for plugin manager list
     * @return string
     */
    public function getLabel()
    {
        return 'Ausgabe Kategorien zu jedem Artikel';
    }

    /**
     * Standard plugin install method to register all required components.
     * @throws \Exception
     * @return bool success
     */
    public function install()
    {
        $this->subscribeEvents();
        $this->createConfigForm();

        return true;
    }

    /**
     * @return bool
     */
    public function update()
    {
        return true;
    }


    /**
     * Creates the configuration form for the plugin
     *
     * @protected
     * @return void
     */
    protected function createConfigForm()
    {
        $form = $this->Form();   
        
        $form->setElement('text', 'compareCategory', 
          array(
            'label' => 'Kategorie:', 
            'description' => 'Bitte tragen Sie ein, welche Kategorie verglichen werden soll'
          )
        );    

    }

    /**
     * Registers all necessary events and hooks.
     */
    private function subscribeEvents()    
    {
        
        $this->subscribeEvent(
            'Enlight_Controller_Dispatcher_ControllerPath_Widgets_CbeCategoriesInfo',
            'onGetWidgetController'
        );        
        

    }

    /**
     * Event listener function which returns the controller path of the plugin widget controller.
     * @param Enlight_Event_EventArgs $arguments
     *
     * @return string
     */
    public function onGetWidgetController(Enlight_Event_EventArgs $arguments) {
        $this->Application()->Template()->addTemplateDir(
            $this->Path() . 'Views/'
        );
        
        return $this->Path(). 'Controllers/Widgets/CbeCategoriesInfo.php';
    }

    /**
     * Event listener function which called over the Enlight_Controller_Action_PostDispatch_Frontend_Index event.
     *
     * @param Enlight_Event_EventArgs $arguments
     */
    public function onPostDispatchFrontend(Enlight_Event_EventArgs $arguments)
    {
              
        $controller = $arguments->getSubject();
        $view = $controller->View();
        $request = $controller->Request();
        $controllerName = $request->getControllerName();
        
        $config = Shopware()->Plugins()->Frontend()->CbeCategoriesInfo()->Config();
        
        $pattern = array_map('trim', explode(',', $config->allowedController));          
        
        if(!in_array($controllerName, $pattern)) {
          return;
        }  
                
    }
    
}

Vielleicht habt Ihr ja eine Idee!

LG und Dankeschön,

Chris

Hi coarsy,

das Problem entsteht aus dem box-minimal.tpl.php:294 Template.

Die renderEsiTag Funktion entstammt dem Default HTTPCache Plugin von Shopware, ist dieses aktiviert, ist der HTTP Cache generell aktiviert?

Das scheint auf jeden Fall an der Stelle nicht geladen werden zu können.

Gruß

Daniel

Moinsen Daniel,

vielen Dank für Deine Antwort. Ja, der HTTP-Cache ist komplett aktiviert. Wie gesagt, leert man den Cache einmal komplett und lässt das Template neu kompilieren, funktioniert es wieder eine ganze Weile.

LG und Dankeschön,

Chris