Plugin für Blocküberschreibung/Anpassung

Folgenden Block möchte ich mit einem Plugin überschreiben: Pfad: /themes/Frontend/Bare/widgets/checkout/info.tpl Inhalt: [code] {block name=“frontend_index_checkout_actions_notepad”}

  • [{if $sNotesQuantity > 0} {$sNotesQuantity} {/if}]({url controller=‘note’} “{”)
    {/block} [/code] Lösungsansatz: private function registerEvents() { $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Index', 'onPostDispatchFrontend' ); } public function onPostDispatchFrontend(Enlight\_Event\_EventArgs $arguments) { $controller = $arguments-\>getSubject(); $request = $controller-\>Request(); $response = $controller-\>Response(); $view = $controller-\>View(); if (!$request-\>isDispatched() || $response-\>isException() || !$view-\>hasTemplate()) { return; } $view-\>addTemplateDir($this-\>Path() . 'Views/'); $view-\>extendsTemplate('frontend/plugins/NAMEPLUGIN/index.php'); $view-\>addTemplateDir($this-\>Path() . 'Views/'); $view-\>extendsTemplate('frontend/plugins/NAMEPLUGIN/widgets/checkout/info.php'); } Wie muss die Verlinkung in: $view->extendsTemplate(‘frontend/plugins/NAMEPLUGIN/widgets/checkout/info.php’); gewählt werden?

Was für ne Verlinkung? Also erstmal ist das nicht der Index-Controller sondern der Checkout-Controller. Event-Registrierung also eher: Enlight\_Controller\_Action\_PostDispatchSecure\_Frontend\_Chekcout Dann kannst du auch den Kram einfach rausschmeißen: if (!$request-\>isDispatched() || $response-\>isException() || !$view-\>hasTemplate()) { return; } Dann reicht es eine Template-Datei hinzuzufügen wenn der Checkout aufgerufen wird: $view-\>addTemplateDir($this-\>Path() . 'Views/'); $view-\>extendsTemplate('frontend/plugins/NAMEPLUGIN/widgets/checkout/info.tpl') Diese Datei musst du nun nur noch anlegen. Einen Ordner Views auf der Ebene der Bootstrap anlegen und die weiteren Unterordnerhirarchie halt auch (frontend -> dadrin plugins -> dadrin NAMEPLUGIN etc.) In der Datei info.tpl steht dann sowas: {extends file="parent:frontend/widgets/checkout/info.tpl"} {block name="frontend\_index\_checkout\_actions\_notepad"} //neuer Code oder leer lassen um den Block auszublenden... {/block}

1 „Gefällt mir“

[quote=“steinsoftware”]Was für ne Verlinkung? Also erstmal ist das nicht der Index-Controller sondern der Checkout-Controller. Event-Registrierung also eher: Enlight\_Controller\_Action\_PostDispatchSecure\_Frontend\_Chekcout Dann kannst du auch den Kram einfach rausschmeißen: if (!$request-\>isDispatched() || $response-\>isException() || !$view-\>hasTemplate()) { return; } Dann reicht es eine Template-Datei hinzuzufügen wenn der Checkout aufgerufen wird: $view-\>addTemplateDir($this-\>Path() . 'Views/'); $view-\>extendsTemplate('frontend/plugins/NAMEPLUGIN/widgets/checkout/info.tpl') Diese Datei musst du nun nur noch anlegen. Einen Ordner Views auf der Ebene der Bootstrap anlegen und die weiteren Unterordnerhirarchie halt auch (frontend -> dadrin plugins -> dadrin NAMEPLUGIN etc.) In der Datei info.tpl steht dann sowas: {extends file="parent:frontend/widgets/checkout/info.tpl"} {block name="frontend\_index\_checkout\_actions\_notepad"} //neuer Code oder leer lassen um den Block auszublenden... {/block}[/quote] Hallo, soweit ich gesehen und gelesen habe (auch in der Shopware 5 - Dokus), sollte der Weg über $view->extendsTemplate nicht mehr verwendet werden, da er es ausschließt, dass man ein Plugin-Template im eigenen Theme überschreiben kann (diesen Weg sollte man nur noch bis Shopware Version 4 verwenden). Siehe hier: https://developers.shopware.com/develop … ick-start/ . Ebenso soll man exakt den Pfad und Dateinamen nehmen, wo die Datei, von der man ableiten möchte, liegt (bzgl. des Überschreibens von Plugin-Templates). Beste Grüße Sebastian

[quote=„sschreier“][quote=„steinsoftware“]Was für ne Verlinkung? Also erstmal ist das nicht der Index-Controller sondern der Checkout-Controller. Event-Registrierung also eher: Enlight\_Controller\_Action\_PostDispatchSecure\_Frontend\_Chekcout Dann kannst du auch den Kram einfach rausschmeißen: if (!$request-\>isDispatched() || $response-\>isException() || !$view-\>hasTemplate()) { return; } Dann reicht es eine Template-Datei hinzuzufügen wenn der Checkout aufgerufen wird: $view-\>addTemplateDir($this-\>Path() . 'Views/'); $view-\>extendsTemplate('frontend/plugins/NAMEPLUGIN/widgets/checkout/info.tpl') Diese Datei musst du nun nur noch anlegen. Einen Ordner Views auf der Ebene der Bootstrap anlegen und die weiteren Unterordnerhirarchie halt auch (frontend -> dadrin plugins -> dadrin NAMEPLUGIN etc.) In der Datei info.tpl steht dann sowas: {extends file="parent:frontend/widgets/checkout/info.tpl"} {block name="frontend\_index\_checkout\_actions\_notepad"} //neuer Code oder leer lassen um den Block auszublenden... {/block}[/quote] Hallo, soweit ich gesehen und gelesen habe (auch in der Shopware 5 - Dokus), sollte der Weg über $view->extendsTemplate nicht mehr verwendet werden, da er es ausschließt, dass man ein Plugin-Template im eigenen Theme überschreiben kann (diesen Weg sollte man nur noch bis Shopware Version 4 verwenden). Ebenso soll man exakt den Pfad und Dateinamen nehmen, wo die Datei, von der man ableiten möchte, liegt (bzgl. des Überschreibens von Plugin-Templates). Beste Grüße Sebastian[/quote] Was schlägst du als Alternative vor?

[quote=“3pyTec”][quote=“sschreier”][quote=“steinsoftware”]Was für ne Verlinkung? Also erstmal ist das nicht der Index-Controller sondern der Checkout-Controller. Event-Registrierung also eher: Enlight\_Controller\_Action\_PostDispatchSecure\_Frontend\_Chekcout Dann kannst du auch den Kram einfach rausschmeißen: if (!$request-\>isDispatched() || $response-\>isException() || !$view-\>hasTemplate()) { return; } Dann reicht es eine Template-Datei hinzuzufügen wenn der Checkout aufgerufen wird: $view-\>addTemplateDir($this-\>Path() . 'Views/'); $view-\>extendsTemplate('frontend/plugins/NAMEPLUGIN/widgets/checkout/info.tpl') Diese Datei musst du nun nur noch anlegen. Einen Ordner Views auf der Ebene der Bootstrap anlegen und die weiteren Unterordnerhirarchie halt auch (frontend -> dadrin plugins -> dadrin NAMEPLUGIN etc.) In der Datei info.tpl steht dann sowas: {extends file="parent:frontend/widgets/checkout/info.tpl"} {block name="frontend\_index\_checkout\_actions\_notepad"} //neuer Code oder leer lassen um den Block auszublenden... {/block}[/quote] Hallo, soweit ich gesehen und gelesen habe (auch in der Shopware 5 - Dokus), sollte der Weg über $view->extendsTemplate nicht mehr verwendet werden, da er es ausschließt, dass man ein Plugin-Template im eigenen Theme überschreiben kann (diesen Weg sollte man nur noch bis Shopware Version 4 verwenden). Ebenso soll man exakt den Pfad und Dateinamen nehmen, wo die Datei, von der man ableiten möchte, liegt (bzgl. des Überschreibens von Plugin-Templates). Beste Grüße Sebastian[/quote] Was schlägst du als Alternative vor?[/quote] Hallo, das ist doch gut in der Doku anhand eines Beispiels beschrieben: https://developers.shopware.com/develop … ick-start/ . Es soll ganz einfach die Zeile $view->extendsTemplate(…) komplett weggelassen werden und der Pfad und Dateiname, wo die Datei, von der man ableiten möchte, komplett so übernommen werden - dadurch weiss das Plugin selbst, von wo es genau ableiten soll und von welchen Dateien es erben soll. Die Verwendung von $view->extendsTemplate(…) wird weder den Kunden noch Shopware freuen - da man dadurch jegliche Anpassung einer Templatedatei (tpl) eines Plugins innerhalb des eigenen Themes unterbindet. Beste Grüße Sebastian

1 „Gefällt mir“

[quote]soweit ich gesehen und gelesen habe (auch in der Shopware 5 - Dokus), sollte der Weg über $view->extendsTemplate nicht mehr verwendet werden, da er es ausschließt, dass man ein Plugin-Template im eigenen Theme überschreiben kann (diesen Weg sollte man nur noch bis Shopware Version 4 verwenden). Siehe hier: https://developers.shopware.com/develop … ick-start/ .[/quote] Das scheint wohl so zu stimmen. Dann einfach das $view->extendsTemplate weglassen

[quote=“steinsoftware”][quote]soweit ich gesehen und gelesen habe (auch in der Shopware 5 - Dokus), sollte der Weg über $view->extendsTemplate nicht mehr verwendet werden, da er es ausschließt, dass man ein Plugin-Template im eigenen Theme überschreiben kann (diesen Weg sollte man nur noch bis Shopware Version 4 verwenden). Siehe hier: https://developers.shopware.com/develop … ick-start/ .[/quote] Das scheint wohl so zu stimmen. Dann einfach das $view->extendsTemplate weglassen[/quote] Hallo, das scheint nicht nur “wohl” so zu stimmen, sondern wurde ja auch schon von Shopware selbst geschrieben (und dies soll man ja nicht erst seit ein paar Tagen so machen): themes-und-design-f101/ladereihenfolge-von-template-informationen-falsch-t32198-10.html#p140218 . Beste Grüße Sebastian