Ergebnis 1 bis 17 von 17

Thema: Bei Veröffentlichung einer Nachricht E-Mail an den Admin schicken

  1. #1
    Contao-Nutzer
    Registriert seit
    01.04.2023.
    Beiträge
    61

    Standard Bei Veröffentlichung einer Nachricht E-Mail an den Admin schicken

    Hallo zusammen,

    ich muss mich mal wieder ans Forum wenden. Über die Suche habe ich nichts gefunden, was mir weitergeholfen hat.

    Ich möchte gerne eine E-Mail an den System-Admin schicken, wenn von einem Redakteur eine neue Nachricht veröffentlicht wurde.

    Mein Ansatz:
    Ich würde über den onsubmit_callback die tl_news auf published=1 prüfen und dann eine E-Mail verschicken.
    Das Problem, was ich jetzt habe ist, dass ich nach dem Speichern im BE zwar auf $dc->activeRecord zugreifen kann, hier jedoch noch nicht die Änderung von published drin steht. Diese befindet sich im Array "arrModified", wo ich jedoch nicht drauf zugreifen kann, oder es nicht richtig mache.

    Wie kann ich für eine if-Bedingung auf das Array arrModified zugreifen?
    Oder gibt es eine elegantere Lösung?

    Hier mein Code im OnSubmitListener:

    PHP-Code:
        public function newsOnsubmitCallback($dc)
        {
            
    $activeRecord $dc->activeRecord;
            
    $isModifiedRecord $dc->activeRecord->isModified//true
            //dd($activeRecord);
        


  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Ich denke du solltest eher einen save_callback für tl_news.published implementieren. Der onsubmit würde nicht ausgeführt werden, wenn man bspw. den Toggle in der Liste nutzt.
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Nutzer
    Registriert seit
    01.04.2023.
    Beiträge
    61

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ich denke du solltest eher einen save_callback für tl_news.published implementieren. Der onsubmit würde nicht ausgeführt werden, wenn man bspw. den Toggle in der Liste nutzt.
    Hallo Spooky, danke für den Hinweis.

    Wie genau registriere ich denn den save_callback?
    Den onsubmit-Callback hatte ich über die services.yml eingebunden:

    Code:
        ...\...Bundle\EventListener\DataContainer\OnSubmitListener:
            tags:
                - { name: contao.callback, table: tl_content, target: config.onsubmit, method: contentOnsubmitCallback, priority: 100 }
                # - { name: contao.callback, table: tl_news, target: config.onsubmit, method: newsOnsubmitCallback, priority: 100 }
    Das Beispiel in der Doku funktioniert irgendwie nicht.
    Also "NewsPublishedSaveCallback.php" unter "EventListener/DataContainer" angelegt.

    Und in die Datei "NewsPublishedSaveCallback.php" diesen Block kopiert:

    PHP-Code:
    <?php

    // src/EventListener/DataContainer/ContentTextSaveCallback.php
    namespace App\EventListener\DataContainer;

    use 
    Contao\CoreBundle\ServiceAnnotation\Callback;
    use 
    Contao\DataContainer;

    /**
     * @Callback(table="tl_news", target="fields.published.save")
     */
    class NewsPublishedSaveCallback
    {
        public function 
    __invoke($valueDataContainer $dc)
        {

            
    dd($value);

            
    // Show an error if tl_content.text contains "foobar"
            
    if (false !== stripos($value'foobar')) {
                throw new \
    Exception('String "foobar" is not allowed.');
            }

            
    // Or process the value before saving
            
    $value strtoupper($value);

            
    // Return the processed value
            
    return $value;
        }
    }
    Oder muss das über die DCA tl_news.php laufen?
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_news']['fields']['published']['save_callback'
    Wenn ja, wie genau mache ich das dann?

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Sieht korrekt aus (bis auf die Angabe des Dateinamens, ich gehe mal davon aus dass das ein Copy & Paste error ist und deine Datei aber richtig benannt ist). Poste mal die Ausgabe von
    Code:
    vendor/bin/contao-console debug:container NewsPublishedSaveCallback
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Contao-Nutzer
    Registriert seit
    01.04.2023.
    Beiträge
    61

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Sieht korrekt aus (bis auf die Angabe des Dateinamens, ich gehe mal davon aus dass das ein Copy & Paste error ist und deine Datei aber richtig benannt ist). Poste mal die Ausgabe von
    Code:
    vendor/bin/contao-console debug:container NewsPublishedSaveCallback
    Was genau meinst du mit dem Dateinamen?

    Hier die Ausgabe:
    Code:
    10:07:50 CRITICAL  [console] Error thrown while running command "debug:container NewsPublishedSaveCallback". Message: "No services found that match "NewsPublishedSaveCallback"." ["exception" => Symfony\Component\Console\Exception\InvalidArgumentException^ { …},"command" => "debug:container NewsPublishedSaveCallback","message" => "No services found that match "NewsPublishedSaveCallback"."]
    
                                                                 
      No services found that match "NewsPublishedSaveCallback".  
                                                                 
    
    debug:container [--show-arguments] [--show-hidden] [--tag TAG] [--tags] [--parameter PARAMETER] [--parameters] [--types] [--env-var ENV-VAR] [--env-vars] [--format FORMAT] [--raw] [--deprecations] [--] [<name>]

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Zitat Zitat von pottkind Beitrag anzeigen
    Was genau meinst du mit dem Dateinamen?
    In deinem Code hast du
    PHP-Code:
    // src/EventListener/DataContainer/ContentTextSaveCallback.php 
    geschrieben, das wäre aber falsch.
    » sponsor me via GitHub or PayPal or Revolut

  7. #7
    Contao-Nutzer
    Registriert seit
    01.04.2023.
    Beiträge
    61

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    In deinem Code hast du
    PHP-Code:
    // src/EventListener/DataContainer/ContentTextSaveCallback.php 
    geschrieben, das wäre aber falsch.
    Der Dateiname ist aus dem Beispiel der Doku.
    Da die Zeile auskommentiert war, habe ich die nicht mit angepasst. Ist die Zeile relevant?

    Der namespace "namespace App\EventListener\DataContainer;" war auch noch falsch.
    Habe ihn zwar so angepasst, wie ich ihn auch im OnSubmitListener stehen habe, ändert aber leider nichts.
    Geändert von pottkind (12.04.2023 um 11:36 Uhr)

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Nein, das ist nur ein Hinweis wie deine Datei heißt.

    Poste mal den gesamten Pfad der Datei.
    » sponsor me via GitHub or PayPal or Revolut

  9. #9
    Contao-Nutzer
    Registriert seit
    01.04.2023.
    Beiträge
    61

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Nein, das ist nur ein Hinweis wie deine Datei heißt.

    Poste mal den gesamten Pfad der Datei.
    /bundles/ukdev/contao-school-whiteboard-bundle/src/EventListener/DataContainer/NewsPublishedSaveCallback.php

  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Achso - du hast das in einem Bundle. Dann stimmt der Namespace deines Codes nicht. Außerdem musst du dafür sorgen, dass der Service korrekt registriert und getagged wird.
    » sponsor me via GitHub or PayPal or Revolut

  11. #11
    Contao-Nutzer
    Registriert seit
    01.04.2023.
    Beiträge
    61

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Achso - du hast das in einem Bundle. Dann stimmt der Namespace deines Codes nicht. Außerdem musst du dafür sorgen, dass der Service korrekt registriert und getagged wird.
    Den Namespace hatte ich schon angepasst

    Code:
    namespace Ukdev\ContaoSchoolWhiteboardBundle\EventListener\DataContainer;
    Wie muss ich den Service korrekt registrieren?

    Kann man das auch über die services.yml machen?

  12. #12
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Musst du, ja
    » sponsor me via GitHub or PayPal or Revolut

  13. #13
    Contao-Nutzer
    Registriert seit
    01.04.2023.
    Beiträge
    61

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Musst du, ja
    Aber wie würde das in der services.yml gemacht?
    Was muss ich bei target eintragen?

    services.yml
    Code:
        Ukdev\ContaoSchoolWhiteboardBundle\EventListener\DataContainer\NewsPublishedSaveCallback:
            tags:
                - { name: contao.callback, table: tl_news, target: config.save, method: newsOnsaveCallback, priority: 100 }

    NewsPublishedSaveCallback.php
    PHP-Code:
    <?php

    namespace Ukdev\ContaoSchoolWhiteboardBundle\EventListener\DataContainer;

    use 
    Contao\CoreBundle\ServiceAnnotation\Callback;
    use 
    Contao\DataContainer;

    /**
     * @Callback(table="tl_news", target="fields.published.save")
     */
    class NewsPublishedSaveCallback
    {
        public function 
    newsOnsaveCallback($valueDataContainer $dc)
        {

            
    dd($value);
            
    // Show an error if tl_content.text contains "foobar"
            // if (false !== stripos($value, 'foobar')) {
            //     throw new \Exception('String "foobar" is not allowed.');
            // }

            // Or process the value before saving
            
    $value strtoupper($value);

            
    // Return the processed value
            
    return $value;
        }
    }
    ??

  14. #14
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Du taggst deinen Service aktuell zwei mal. Einmal über die services.yaml und einmal über die Annotation direkt in der PHP Datei. Wenn du Annotations nutzen möchtest, dann musst du nur autoconfigure aktivieren bei deinem Service.
    » sponsor me via GitHub or PayPal or Revolut

  15. #15
    Contao-Nutzer
    Registriert seit
    01.04.2023.
    Beiträge
    61

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Du taggst deinen Service aktuell zwei mal. Einmal über die services.yaml und einmal über die Annotation direkt in der PHP Datei. Wenn du Annotations nutzen möchtest, dann musst du nur autoconfigure aktivieren bei deinem Service.
    autoconfigure steht in der services.yml bereits auf true.

    Ich glaube ich bekomme es auch über diesen Weg hin:

    Code:
    Ukdev\ContaoSchoolWhiteboardBundle\EventListener\DataContainer\NewsPublishedSaveCallback:
            tags:
                - { name: contao.callback, table: tl_news, target: fields.published.save, priority: 100 }
    PHP-Code:
    class NewsPublishedSaveCallback
    {
        public function 
    __invoke($valueDataContainer $dc)
        {

            
    dd($value);
            
    // Show an error if tl_content.text contains "foobar"
            // if (false !== stripos($value, 'foobar')) {
            //     throw new \Exception('String "foobar" is not allowed.');
            // }

            // Or process the value before saving
            
    $value strtoupper($value);

            
    // Return the processed value
            
    return $value;
        }

    Dann müsste ich jedoch die Annotation in der PHP Datei rausnehmen, korrekt?

  16. #16
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Jup.
    » sponsor me via GitHub or PayPal or Revolut

  17. #17
    Contao-Nutzer
    Registriert seit
    01.04.2023.
    Beiträge
    61

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Jup.
    Perfekt. So langsam kommt Licht ins Dunkel...

    Vielen Dank für deine Hilfe!!

Aktive Benutzer

Aktive Benutzer

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

Lesezeichen

Lesezeichen

Berechtigungen

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