Über Plugin ein Standard Template ändern

Hallo Leute,

ich komme hier nicht weiter, kann auch nichts vernünftiges im Internet finden. Folgendes Problem:

Ein Plugin soll das Detail Template etwas überschreiben/ändern. Die Templates im Plugin werden aber vom Shopware nicht benutzet, somit finden auch eine Änderung statt.

Ich habe schon verschiedene Varianten versucht, trotzdem kein Ergebniss.

Das ist die Haupt-Plugin-Datei:

Ort: custom/plugins/KreageBonusSystem/

namespace KreageBonusSystem;

use Shopware\Components\Plugin;

class KreageBonusSystem extends Plugin
{
    public static function getSubscribedEvents()
    {
        return [
            'Enlight_Controller_Action_PreDispatch_Frontend_Detail' => 'onPreDispatch',
        ];
    }

    /**
     * @param \Enlight_Controller_ActionEventArgs $args
     */
    public function onPreDispatch(\Enlight_Event_EventArgs $args)
    {
        // Template Pfad für alle Anfrage registrieren
        $subject = $args->getSubject(); // \Enlight_Controller_Action
        $subject->View()->addTemplateDir( __DIR__.'/Resources/views');

        echo 'geladen';
        echo var_dump(file_exists( __DIR__.'/Resources/views'));
    }

}

 

Und das ist das Template - Detail Index:

Ort: custom/plugins/KreageBonusSystem/Resources/views/frontend/detail/index.tpl

{extends file='parent:frontend/index/index.tpl'}


{block name='frontend_index_content'}
    test
    {include file="frontend/detail/content.tpl"}
{/block}

 

Die Ausgabe im in Detail Seite (ganz unten): 

geladenbool(true)

 

Was mache ich falsch??

Danke erst mal :slight_smile:

Hallo,

du möchtest die Artikel - Detailseite anpassen, erbst aber die Startseite?

Es müsste wohl eher:

{extends file='parent:frontend/detail/index.tpl'}


{block name='frontend_index_content'}
    test
    {include file="frontend/detail/content.tpl"}
{/block}

sein.

Grüße

Sebastian

1 Like

Wenn du ein Plugin mit einem Plugin überschreiben willst, musst du dir auch die subscribed-Events des Plugins ansehen, dass du überschreiben willst. Du musst dich dann auf jeden Fall vor dem anderen Plugin registrieren, damit du das überhaupt überschreiben kannst. Entweder übergibst du eine Priorität, wenn du ein Event subscribst:

    public static function getSubscribedEvents()
    {
        return [
            'Enlight_Controller_Action_PreDispatch_Frontend_Detail' => ['onFrontend',-100],
        ];
    }

Oder du musst halt schauen, dass du ein Event früher nimmst. bspw. direkt ‘Enlight_Controller_Action_PreDispatch_Frontend’ .

Viellen dank. Das mit dem Template und der Index Adresse zum Parent ist logisch, das habe ich wohl übersehen :). Habe das geändert aber trotzdem keine Ausgabe von diesem Template. Habe auch tast Plugin immer wieder neu Installieren lassen und das Template immer neu kompilieren.
Habe auch mit einiegen Events in getSubscribedEvents() experementiert, geht auch nicht.

 Habe das Gefühl, dass Shopware nicht weiß das ich die Templates überschreiben müchte.

Hier noch mal der Code was ich habe:

Plugin:
custom/plugins/KreageBonusSystem/KreageBonusSystem.php

 'onPreDispatch',

            'Enlight_Controller_Action_PreDispatch_Frontend' => 'onPreDispatch',
            // 'Enlight_Controller_Action_PreDispatch_Frontend_Detail' => ['onFrontend',-100],


            // 'Enlight_Controller_Action_PreDispatch' => 'onPreDispatch',
            // 'Enlight_Controller_Action_PreDispatch_Frontend' => 'onPreDispatch',

        ];
    }

    /**
     * @param \Enlight_Controller_ActionEventArgs $args
     */
    public function onPreDispatch(\Enlight_Event_EventArgs $args)
    {
        // Template Pfad für alle Anfrage registrieren
        $subject = $args->getSubject(); // \Enlight_Controller_Action
        $subject->View()->addTemplateDir( __DIR__.'/Resources/views');

        echo 'geladen';
        echo var_dump(file_exists( __DIR__.'/Resources/views'));
    }

}

 

Template:
custom/plugins/KreageBonusSystem/Resources/views/frontend/detail/index.tpl

{extends file='parent:frontend/detail/index.tpl'}


{block name='frontend_index_content'}
    test
    {include file="frontend/detail/content.tpl"}
{/block}

 

Ich habe in den lezten Tagen das Udemy Tutorial gemacht und habe genau das gleiche Problem. Im Tutorial auf Udemy wird gezeigt, wie man die search.tpl in frontend/detail/ extendet, und diese durch einen text ersetzt. Wenn man die Schritte 1 zu 1 nach geht, kommt man lediglich zu dem Ergebniss, das sich auf der Seite selber nicht ändert.

Subscriber:

 ['onPreDispatch', -100],
        ];
    }

    public function onPreDispatch(\Enlight_Event_EventArgs $args)
    {
        /** @var \Shopware_Controllers_Frontend_RoutingDemonstration $subject */
        $controller = $args->getSubject();

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

Template:

{extends file="parent:frontend/index/search.tpl"}

{block name='frontend_index_search_container'}
    HIER KEINE SUCHE
{/block}

Ich suche jetzt schon seit mehreren Stunden nach einer Lösung. In keinem der Tutorials auf der Developer Seite Funktioniert dieser Ansatz, selbst das Example Plugin funktioniert bei mir nicht.