StrelitzerStrelitzer MemberComments: 15 Received thanks: 2 Member since: September 2018 edited October 10

Ich habe ein Frontend Widget erstellt, das grundsätzlich auch funktioniert. Allerdings wird nicht das im Plugin hinterlegte Template benutzt, sondern das aus dem Theme.
Wenn ich also im aktivierte Theme den Actioncode eintrage, wird der Code ausgeführt und das Widget angezeigt.
{action module=widgets controller=language action=select}
Ich möchte aber gern, dass das Widget hinzugefügt wird, wenn das Plugin aktiviert wird und dass das Template aus dem Plugin benutzt wird.
themes/Frontend/ThemeName/widgets/language/select.tpl == wird benutzt
custom/plugins/PluginName/Resources/views/widgets/language/select.tpl == wird NICHT benutzt

class Shopware_Controllers_Widgets_Language extends Enlight_Controller_Action
{
    public function preDispatch()
    {
        $template = Shopware()->Container()->get('template');
        $template->addTemplateDir(realpath(__DIR__ . '/../../Resources/views'));
    }

    public function selectAction()
    {
        $template = Shopware()->Container()->get('template');
        $template->addTemplateDir(realpath(__DIR__ . '/../../Resources/views'));
        $view = $this->View();
        $view->assign(...);
    }
}

Die template-Operation in der Methode preDispatch habe ich bei einem anderen Plugin, das ein Widget bereitstellt, so abgeschrieben. Es bringt aber ebenso wenig Erfolg.
Was mache ich falsch?

Answers

  • sirthxalotsirthxalot MemberComments: 18 Received thanks: 2 Member since: July 4

    Hallo @Strelitzer

    Hast Du einmal versucht das Template zu überschreiben:

    $view->extendsTemplate('backend/swag_attribute/Shopware.attribute.Form.js');

    Ausserdem solltest Du nicht template Service verwenden sondern die View welche auch angepasst werden soll also bspw. so:

    <?php
    namespace Backend\Subscriber;
    
    use Enlight\Event\SubscriberInterface;
    
    class Widget implements SubscriberInterface
    {
        public static function getSubscribedEvents()
        {
            return [
                'Enlight_Controller_Action_PostDispatch_Backend_Index' => 'extendsBackendWidget'
            ];
        }
    
        public function extendsBackendWidget(\Enlight_Event_EventArgs $args)
        {
            /** @var \Enlight_Controller_Action $controller */
            $controller = $args->getSubject();
    
            if ($controller->Request()->getActionName() !== 'index') {
                return;
            }
    
            $controller->View()->extendsTemplate('backend/widgets/hurz.js');
        }
    
    }

    Gruss

    Alexander

Sign In or Register to comment.