Theme kompilieren lassen, wenn Pluginkonfiguration gespeichert wird

Ich will dem Nutzer anbieten sein Theme zu kompilieren, sobald er die Konfiguration meines Plugins speichert. Oder nicht einmal anbieten, einfach kompilieren. Ist das möglich?

Das Event zum Speichern ist mir bekannt: Shopware_Controllers_Backend_Config_After_Save_Config_Element

Nur wie kann ich das aktive theme kompilieren lassen?

Schau dir mal hier die execute-function an. Da müsstest du alles finden was du brauchst: shopware/ThemeCacheGenerateCommand.php at 5.2 · shopware/shopware · GitHub

Danke für die Antwort. Das hier ist mein Versuch (Ich kriege den Pfeil im Forum nicht angezeigt):

   public static function getSubscribedEvents()
    {
        return ['Shopware_Controllers_Backend_Config_After_Save_Config_Element' => 'onSave'];
    }

    public function onSave(\Enlight_Event_EventArgs $args)
    {
        $repository = $this->container->get('models')->getRepository('Shopware\Models\Shop\Shop');
        $query = $repository->getShopsWithThemes();
        $shops = $query->getResult(
            AbstractQuery::HYDRATE_OBJECT
        );
        if (empty($shops)) {
            //$output->writeln('No theme shops found');
            return;
        }
        /** @var $compiler \Shopware\Components\Theme\Compiler */
        $compiler = $this->container->get('theme_compiler');
        foreach ($shops as $shop) {
           // $output->writeln(sprintf('Generating theme cache for shop "%s" ...', $shop->getName()));
            $compiler->compile($shop);
        }
       // $output->writeln('Clearing HTTP cache ...');
        /** @var $cacheManager CacheManager */
        $cacheManager = $this->container->get('shopware.cache_manager');
        $cacheManager->clearHttpCache();
    }

 

Leider klappt das nicht. Der $compiler und der $shop werden noch korrekt geholt. Beim Aufruf von compile($shop) geht’s nicht weiter. Erstmal passiert gar nichts und dann kommt communication failure. 

 

Theme kompilieren dauert ja eine Weile… kann es sein, dass du einfach in einen Timeout läufst?

Hi,

communication failure kommt dann, wenn der Shop nicht genügend Resourcen hat und läuft dann ein einen Timeout. Probier doch mal, in der htaccess (Root des Shops) den zugewiesenen Speicher höher zu setzen und die Execution-Time auf 120 Sek. (auch in der htaccess). Das Ganze hängt stark vom Provider ab. Bei einigen hat man diese Probleme nicht.

Grüße

Frank

Okay, werde ich versuchen. Aber ich habe auch schon viele Plugins installiert, die nach dem Speichern das Theme kompilieren (mit schickem Kompilier-Fenster). Und da klappt es ja auch wunderbar. Auch kann ich das Theme von Hand kompilieren (im backend und in der Console) . Execution-Time scheint mir daher nicht das Problem zu sein.

Hi!

Da Problem hatte ich auch, egal ob update oder Performance Modul. Hab dann die PHP.ini bearbeitet, erst die executuion Time erhöht ohne Erfolg. Dann den mysql Timeout auf 360 erhöht und seit dem ist alles wieder gut.

Grüße

Michael

 

Ja, weil es nichts bringt, in der php.ini die max_execution_time zu erhöhen, wenn das in Shopware via ini_set wieder anders gesetzt wird. Soetwas muss direkt in die config.php unter dem Schlüssel php_settings (siehe Doku).

Ich hab da auch mal was geschrieben.

https://forum.shopware.com/discussion/comment/191672/#Comment_191672

Vielleicht hilft es irgend jemanden

Gruß
​DaMardl

@t2oh4e schrieb:

Theme kompilieren dauert ja eine Weile… kann es sein, dass du einfach in einen Timeout läufst?

Sicher dumme Frage … Wie kompiliert man eigentlich sein Theme? 

 

Einstellung -> Cache / Performace

 

gruß

DaMardl