Plugin: Uncaught SmartyException: directory not allowed by security setting

Hallo [@Patrick Stahl](http://forum.shopware.com/profile/1869/Patrick Stahl „Patrick Stahl“)‍

könntest du bitte noch was zu meiner Frage obendrüber sagen? Kann man im Event Theme_Inheritance_Template_Directories_Collected auch schon ein Smarty Plugin laden? Wenn ja, wie?

Dankeschön

 

Moin @puhas‍,

das kann ich dir gerade nicht ganz genau sagen, müsstest du einfach mal ausprobieren.
Das kannst du ja erstmal Quick & Dirty direkt in engine/Shopware/Components/Theme/Inheritance.php#193 hiermit versuchen:

Shopware()->Template()->registerPlugin(...);

Sollte das funktionieren, kannst du ja den sauberen Weg über einen Subscriber und den DI-Container wählen.

Gruß,
Patrick  Shopware

1 „Gefällt mir“

Guten Morgen [@Patrick Stahl](http://forum.shopware.com/profile/1869/Patrick Stahl „Patrick Stahl“)‍,

kommst du evtl. diese Woche zum Problem von @mowlwurf‍?
Wäre super.

Grüße
Ottscho

Das kannst du ja erstmal Quick & Dirty direkt in engine/Shopware/Components/Theme/Inheritance.php#193 hiermit versuchen:

Shopware()->Template()->registerPlugin(…);

 

Danke Patrick, mit

Shopware()->Template()->addPluginsDir( __DIR__. '/SmartyPlugins/');

funktioniert es schon mal.

Habe zu kompliziert gedacht Gasp

So, dank [@Patrick Stahl](http://forum.shopware.com/profile/1869/Patrick Stahl “Patrick Stahl”)‍ ist mein Problem nun auch geklärt,

hatte mit einer alten Plugin Template Struktur und der folgenden Funktion zu tun.

$view->extendsTemplate('frontend/plugins/mein_plugin/listing.tpl');

Diese ist deprecated und hat im Listing in Verbindung mit aktiviertem HTTP-Cache zu dem von mir beschriebenen fehlerhaften Verhalten geführt.

Insofern man, wie ich in dem Fall nur bestehende Templates bearbeitet, sollte man die Templates in der Frontend Theme Struktur anlegen und auf das extendsTemplate verzichten, da diese dann automatisch geladen werden. Also “frontend/listing/listing.tpl” beispielsweise.

Will man explizit ein neues/komplett eigenes Template verwenden sollte man die Funktion loadTemplate verwenden, darf in der, ich nenne sie mal custom.tpl dann nicht vergessen das entsprechende Template zu extenden, da sonst vom Rest der Seite nichts mehr geladen wird.

Ich hoffe ich habe das verständlich wiedergegeben. Dadurch tritt jedenfalls das mysteriöse Verhalten mit dem HTTP-Cache nicht mehr auf. Und nochmals riesen Dank an [@Patrick Stahl](http://forum.shopware.com/profile/1869/Patrick Stahl “Patrick Stahl”)‍ für seinen Einsatz.

Gruß

Daniel

1 „Gefällt mir“

[@Patrick Stahl](http://forum.shopware.com/profile/1869/Patrick Stahl “Patrick Stahl”)‍

Ich verwende in meinem Plugin folgenden Code um im Backend ein Icon hinzuzufügen.

public static function getSubscribedEvents()
    {
        return [
            'Enlight_Controller_Action_PostDispatch_Backend_Index' => 'addBackendTemplateDir',
        ];
    }


/**
     * @param \Enlight_Event_EventArgs $args
     */
    public function addBackendTemplateDir(\Enlight_Event_EventArgs $args) {
        try {
            /** @var \Enlight_Controller_Action $controller */
            $controller = $args->getSubject();
            $view = $controller->View();

            if ($view->hasTemplate()) {
                $view->extendsTemplate(
                    $this->getPath() . '/Resources/Views/backend/index/index.tpl'
                );
            }
        } catch (\Exception $e) {
        }
    }

Nun wurde mir folgender Fehler in 5.4.1 gemeldet: 

MeinPlugin/Resources/Views/backend/index/index.tpl' not allowed by security setting

Ich kann diesen Fehler aktuell nicht in einer SW 5.4.1 Installation nicht reproduzieren. Was kann hier der Fehler sein - für mich sieht die index.tpl Registrierung im Backend richtig aus. Hättest Du oder jemand anderes einen Tipp?

Hallo @elbsurfer‍,

dir fehlt schlichtweg das Hinzufügen deines Template-Ordners, also so:
$this->addTemplateDir($this->getPath() . ‚/Resources/Views/‘);

Ich würde dir aber auch empfehlen deinen „views“ Ordner klein zu schreiben, aus Konsistenz-Gründen. :slight_smile:

Gruß,
Patrick  Shopware