Ergebnis 1 bis 8 von 8

Thema: Eigenen Simple Token in Benachrichtung (Contao 5.3)

  1. #1
    Contao-Nutzer Avatar von Philipp96
    Registriert seit
    06.07.2017.
    Ort
    Meißen
    Beiträge
    59

    Standard Eigenen Simple Token in Benachrichtung (Contao 5.3)

    Gibt es eine Möglichkeit einen eigenen Simple Token in der Benachrichtung zu nutzen? In Contao 4.13 konnte man den SendNotificationMessage Hook nutzen, in Contao 5.3 habe ich das so nicht gelöst bekommen.

    Ich habe in dem Formular eine ID zur Verfügung und möchte dann z. B. über einen Hook per Model mir weitere Daten holen und diese in der Benachrichtigung ausgeben.

  2. #2
    Contao-Fan Avatar von BennyBorn
    Registriert seit
    10.06.2011.
    Ort
    Edenkoben
    Beiträge
    303
    Partner-ID
    6916

    Standard

    Das entscheidende ist hier nicht die Contao-Version sondern die Version des Notication-Centers. Ab Version 2.0 gibt es Symfony-Events. Siehe https://extensions.terminal42.ch/doc...lopers/#events

  3. #3
    Contao-Nutzer Avatar von Philipp96
    Registriert seit
    06.07.2017.
    Ort
    Meißen
    Beiträge
    59

    Standard

    Gibt es denn irgendwo ein Beispiel wie man das nutzen kann? So ganz verstehe ich das anhand der Doku nämlich noch nicht.

  4. #4

  5. #5
    Contao-Nutzer Avatar von Philipp96
    Registriert seit
    06.07.2017.
    Ort
    Meißen
    Beiträge
    59

    Standard

    Ok danke. Ich habe es nun so lösen können.

  6. #6
    Wandelndes Contao-Lexikon Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    10.219
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Philipp96 Beitrag anzeigen
    Ok danke. Ich habe es nun so lösen können.
    wenn es nicht unter "Betriebsgeheimnis" fällt, könntest Du hier für nachfolgend Suchende Deine Lösung etwas mehr ausführen...

  7. #7
    Contao-Nutzer Avatar von Philipp96
    Registriert seit
    06.07.2017.
    Ort
    Meißen
    Beiträge
    59

    Standard

    So habe ich es gelöst. In der Benachrichtigung habe ich nun die Simple Tokens ##course_name##, ##course_date## und ##course_url## zur Verfügung.

    PHP-Code:
    <?php

    namespace App\EventListener;

    use 
    App\Model\CourseModel;
    use 
    App\Model\CourseDateModel;
    use 
    Contao\CoreBundle\Framework\ContaoFramework;
    use 
    Symfony\Component\EventDispatcher\Attribute\AsEventListener;
    use 
    Symfony\Component\HttpFoundation\RequestStack;
    use 
    Terminal42\NotificationCenterBundle\Event\CreateParcelEvent;
    use 
    Terminal42\NotificationCenterBundle\Event\GetTokenDefinitionsForNotificationTypeEvent;
    use 
    Terminal42\NotificationCenterBundle\Parcel\Stamp\TokenCollectionStamp;
    use 
    Terminal42\NotificationCenterBundle\Token\Definition\EmailTokenDefinition;
    use 
    Terminal42\NotificationCenterBundle\Token\Definition\Factory\TokenDefinitionFactoryInterface;
    use 
    Terminal42\NotificationCenterBundle\Token\Definition\TokenDefinitionInterface;

    class 
    HookListener
    {
        public function 
    __construct(
            private 
    readonly RequestStack $requestStack,
            private 
    readonly TokenDefinitionFactoryInterface $tokenDefinitionFactory,
            private 
    readonly ContaoFramework $contaoFramework,
        ) {
        }

        
    #[AsEventListener]
        
    public function onGetTokenDefinitions(GetTokenDefinitionsForNotificationTypeEvent $event): void
        
    {
            
    $event
                
    ->addTokenDefinition($this->getTokenDefinition('course_name'))
                ->
    addTokenDefinition($this->getTokenDefinition('course_date'))
                ->
    addTokenDefinition($this->getTokenDefinition('course_url'))
            ;
        }

        
    #[AsEventListener]
        
    public function onCreateParcel(CreateParcelEvent $event): void
        
    {
            if (!
    $event->getParcel()->hasStamp(TokenCollectionStamp::class)) {
                return;
            }

            
    $formId $event->getParcel()->getStamp(TokenCollectionStamp::class)->tokenCollection->getByName('formconfig_id')->getValue();

            if (
    13 !== $formId) {
                return;
            }

            
    $courseDateId $event->getParcel()->getStamp(TokenCollectionStamp::class)->tokenCollection->getByName('form_course')->getValue();
            
    $courseDateModel CourseDateModel::findById($courseDateId);
            
    $courseModel CourseModel::findById($courseDateModel->id);
            
    $courseDate date('d.m.Y'$courseDateModel->date) . ' ' $courseDateModel->startTime ' - ' $courseDateModel->endTime;

            
    $event->getParcel()->getStamp(TokenCollectionStamp::class)->tokenCollection
                
    ->addToken($this->getTokenDefinition('course_name')->createToken('course_name'$courseModel->title))
                ->
    addToken($this->getTokenDefinition('course_date')->createToken('course_date'$courseDate))
                ->
    addToken($this->getTokenDefinition('course_url')->createToken('course_url'$courseDateModel->url))
            ;
        }

        private function 
    getTokenDefinition(string $token): TokenDefinitionInterface
        
    {
            return 
    $this->tokenDefinitionFactory->create(EmailTokenDefinition::class, $token$token);
        }
    }

  8. #8
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    3.039

    Standard

    Zitat Zitat von Philipp96 Beitrag anzeigen
    […]
    PHP-Code:
    <?php
            
    return $this->tokenDefinitionFactory->create(EmailTokenDefinition::class, $token$token);
    Sollte vielleicht eher

    […]
    PHP-Code:
    <?php
            
    return $this->tokenDefinitionFactory->create(TextTokenDefinition::class, $token$token);
    sein, da Deine Werte ja keine E-Mails sind.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •