plugin development - template uberschreiben nur fur controller

Hallo,

Für ein Plugin mit eigenem Controller / View wollen wir das Frontend / listing / product-box / box-big-image.tpl wiederverwenden
Aber wir wollen nur die box-big-image.tpl überschreiben, wenn der neue custom Controller aktiv ist, nicht auf dem listing-Controller.

Wenn wir big-image.tpl erweitern / überschreiben, ist dies auch auf der category-seite sichtbar.

Gibt es eine möglichkeit, die tpl nur für einen bestimmten Controller zu erweitern?

Fur das template-registration brauchen wir jetzt:

/**
     * {@inheritdoc}
     */
    public static function getSubscribedEvents()
    {
        return [
            'Enlight_Controller_Action_PreDispatch' => 'onPreDispatch'
        ];
    }

    public function onPreDispatch()
    {
        $this->templateManager->addTemplateDir($this->pluginDirectory . '/Resources/views');
    }

Können wir nur unseren benutzerdefinierten Controller abonnieren?

Du könntest dich bspw. nur auf den Controller registrieren, statt auf alles was im Frontend passiert und da dein Template registrieren.

Also Enlight_Controller_Action_PostDispatchSecure_Frontend_MyController.

Hallo Moritz,
Danke!. Leider sind wir immer noch mit der template-vererbung beschäftigt.

Unser Fall:
Wir haben 2 Plugins:
MyPluginABC und MyPluginXYZ

MyPluginABC hat eine template-struktur: Resources> views> frontend> plugins> my_plugin_abc> abc.tpl was ein bare tpl erweitert.

Mit MyPluginXYZ (mit benutzerdefiniertem Controller usw.) wollen wir einen teil der tpl-Datei wie oben erwähnt überschreiben.
MyPluginXYZ hat eine Template-Struktur: Resources> views> frontend> mypluginxyz
Wie können wir abc.tpl überschreiben?

Sollten wir das hier platzieren:
a) Resources > views> Frontend> my_plugin_abc> abc.tpl
oder
b) Resources> views > Frontend> Plugins> my_plugin_abc> abc.tpl
oder
c) Resources> views> Frontend> my_plugin_abc> my_plugin_abc> abc.tpl
oder
c) Resources> views> Frontend> my_plugin_abc> Plugins> my_plugin_abc> abc.tpl

Durch das subription von Enlight_Controller_Action_PostDispatchSecure_Frontend_MyPluginXYZ möchten wir nur überschreiben, wenn der controller geladen ist.

Und wie können wir verwalten, welche Vorlage zuerst geladen wird und in welcher Sekunde?

Hallo Sition,

klingt etwas schwindelerregend :smiley:

Hast du mal probiert das PluginXYZ, welches das Teile des PluginsABC überschreiben soll generell später zu laden?

Wenn du deine Events registrierst gibt es einen letzten optionalen Parameter:
subscribeEvent($event, $listener, $position = null)

Wenn du nun also deine Events registrierst und bei PluginABC auf den Event eine niedrigere Position angibst wie auf PluginXYZ, dann müsste letzteres Plugin auch erst seine Arbeit verrichten, wenn ersteres schon geladen wurde.