Hilfe bei Plugin erstellen

Hallo,

heute brauche ich mal eure Hilfe.

da man sich ja weiterentwickeln möchte habe ich mich an mein ersten Plugin gewagt und bin erst mal gescheitert. 
Und an alle Programmierer, keine Angst, ich möchte nicht in die Branche wechseln, ist nur für mich und mein Ego  Smile

Ich möchte einfach erst mal nur ein Textfeld unter dem Menü anzeigen lassen. Jetzt ist es aber so das der Block mit den Text nur auf der Artikelseite angezeigt wird, und da wo der Artikel eigentlich sein sollte  alles leer ist nur die “Zuletzt angesehen” werden angezeigt.

Der Rest funktioniert und ich kann den Text auch im Plugin speichern und es wird auch angezeigt.

Was mache ich nur falsch?

bei der public function install()

$this->subscribeEvent(
            'Enlight_Controller_Action_PostDispatchSecure_Frontend',
            'onFrontendPostDispatch'
        );

und unten dann

public function onFrontendPostDispatch(Enlight_Event_EventArgs $args)
    {
        /** @var \Enlight_Controller_Action $controller */
        $controller = $args->get('subject');
        $view = $controller->View();
        $view->addTemplateDir(
            __DIR__. '/Views'
        );
        $view->assign('message_container_text', $this->Config()->get('message_container_text'));
    }

vielleicht hat jemand einen Tipp und ja ich habe mich schon hier umgesehen.
Plugin quick Startup Guide
Shopware controller

Uwe

Blush Blush Blush Blush Blush Blush Blush Blush Blush Blush Blush Blush Blush Blush Blush Blush Blush

Was soll hier auch jemand antworten wenn alles richtig ist.

Ich Dummie habe doch glatt die index.tpl im /Views/frontend/detail drin gehabt statt im /Views/frontend/index des Plugins.

Trotzdem würde mich noch interessieren was  die Unterschiede bei den Controllern ist, gibt es dazu noch mehr Informationen und am besten auf Deutsch?

Whenever a Shopware controller is called, it will automatically emit various events, that plugin developers can make use of. The order of the events is the following:

  • Enlight_Controller_Action_PreDispatch
  • Enlight_Controller_Action_PreDispatch_Frontend
  • Enlight_Controller_Action_PreDispatch_Frontend_Index
  • actual call to Shopware_Controllers_Frontend::Index::indexAction
  • Enlight_Controller_Action_PostDispatchSecure_Frontend_Index
  • Enlight_Controller_Action_PostDispatchSecure_Frontend
  • Enlight_Controller_Action_PostDispatchSecure 

Some global events are very powerful when it comes to extending Shopware’s behaviour:

  • Enlight_Controller_Action_PreDispatch_*
  • Enlight_Controller_Action_PostDispatchSecure_*

 

Wie schaffe ich es beim Speichern des Plugins den Caches zu löschen und das Themes neu zu kompilieren, zur Zeit wird er nur gelöscht wenn das Plugin installiert wird.

Uwe 

@useg‍

http://community.shopware.com/Shopware-4-Events-und-Hooks\_detail\_981.html

Funktioniert auch 1:1 auf Shopware 5

Wie schaffe ich es beim Speichern des Plugins den Caches zu löschen und das Themes neu zu kompilieren, zur Zeit wird er nur gelöscht wenn das Plugin installiert wird.

 Beim speichern der Plugin Config ist es zurzeit nicht möglich Elegant zu lösen. Du könntest höchstens beim Plugin aktivierten oder deaktivieren es einfach lösen:
 

https://github.com/shyim/shopware-profiler/blob/master/Bootstrap.php#L78

1 „Gefällt mir“

Bei aktivieren und deaktivieren funktioniert es schon, da der Code schon drin ist,

    public function enable()
    {
        return [
            'success' => true,
            'invalidateCache' => [
                'theme'
            ]
        ];
    }

da ich aber in Plugin noch Anweisungen zum Style habe (margin-top; margin-bottom) werden die bei Änderungen nur übernommen wenn der Cache geleert und das Themes kompilieren wurde.

Danke für den Link zur deutschen Erklärung ich hoffe da hat sich zu Shopware5 nichts geändert, denn es gibt ja noch eine Seite https://developers.shopware.com/developers-guide/shopware-5-plugin-update-guide/

Uwe

Zur Frage nochmals wegen Theme Cache leeren, nach Plugin Config speichern.

Du könntest dich auf Shopware_Controllers_Backend_Config_After_Save_Config_Element registrieren und etwa

/** @var \Shopware\Models\Shop\Repository $repository */
        $repository = $this->container->get('models')->getRepository('Shopware\Models\Shop\Shop');

        $query = $repository->getShopsWithThemes();

        $shops = $query->getResult(
            \Doctrine\ORM\AbstractQuery::HYDRATE_OBJECT
        );

        /** @var $compiler \Shopware\Components\Theme\Compiler */
        $compiler = $this->container->get('theme_compiler');
        
        foreach ($shops as $shop) {
            $compiler->compile($shop);
        }

Ausführen. evtl sollte man noch Abfragen, ob das gespeicherte Elemente auch vom jetzigen Plugin ist  Smile