Hook auf Shopware_Components_TemplateMail createMail

Ich versuche zwecks Email-Verarbeitung und -Tracking auf das aufgerufene Email-Template ($mailModel Parameter in Shopware_Components_TemplateMail::createMail) zuzugreifen.

Ich hänge mich wie folgt an die Komponente bzw. Methode:

 $this-\>subscribeEvent('Shopware\_Components\_TemplateMail::createMail::before', 'onTemplateMailCreate');

die onTemplateMailCreate-Methode im Plugin wird jedoch nicht ausgeführt:

 public function onTemplateMailCreate(Enlight\_Hook\_HookArgs $arguments) { $mailstack = array($arguments-\>get('mailModel'));   [...] }

Wie kann ich mich hier ranhängen oder warum greift mein `Hook an dieser Stelle nicht? Es handelt sich um ein Frontend-Plugin, das dürfte hier aber kaum eine Rolle spielen.

Bin dankbar für jeden Tipp!

Hello

I changed functionality TemplateMail  on this way:

first, I created new component    extends  from Shopware_Components_TemplateMail

namespace ShopwarePlugins\BgsSubMail\Components;

class TemplateMail extends \Shopware_Components_TemplateMail
{

    public function createMail($mailModel, $context = array(), $shop = null, $overrideConfig = array())
    {
       // some code .. 
        parent::createMail( $mailModel, $context, $shop, $overrideConfig);
    }

    public function initFromOldObject(\Shopware_Components_TemplateMail $obj)
    {
        $this->setShop($obj->getShop())
            ->setModelManager($obj->getModelManager())
            ->setStringCompiler($obj->getStringCompiler());
        
    }
}

 

then , I signed up for the event

namespace ShopwarePlugins\BgsSubMail\Subscriber;


class TemplateMail implements \Enlight\Event\SubscriberInterface
{   
    // ..... 

    public static function getSubscribedEvents()
    {
        return [
            'Enlight_Bootstrap_AfterInitResource_TemplateMail' => 'afterInitTemplateMail',
        ];
    }
 
    public function afterInitTemplateMail(\Enlight_Hook_HookArgs $arguments)
    {
        /**
         * @var $cont \Shopware\Components\DependencyInjection\Container
         */
        $cont = $arguments->getSubject();
        if($cont->has('TemplateMail')){
            $newTm = new \ShopwarePlugins\BgsSubMail\Components\TemplateMail();
            $newTm->initFromOldObject($cont->get('TemplateMail'));
            $cont->set('TemplateMail', $newTm);
        }
    }
}

 

 

So, when calling the function   \Shopware()->TemplateMail()->createMail( … );    first called my component. TemplateMail. It works on Shopware 5.1

 

I hope this will help you.

 

 

2 „Gefällt mir“

Where did you register the subscriber for it ?

Subscriben am Plugin Enlight_Controller_Front_StartDispatch und dann deinen subscriber hinzufügen :slight_smile: