[Frage] Hook in tt_news um neueste News zu versenden TYPO3-Version: 6.1.7

  • danila danila
    Padawan
    0 x
    47 Beiträge
    0 Hilfreiche Beiträge
    10. 03. 2014, 11:44

    Hallo Forum,
    ich hoff es kann mir jemand von euch weiter helfen.
    Ich versuche gerade einen Hook in tt_news zu setzen damit eine Email versendet wird sobald es ein neues Element gibt.
    Diese Email soll an eine Usergroup gehen.
    Ich bin schon so weit, dass die Email versendet wird, jedoch will ich in die Message noch den Inhalt des neuen Elements einsetzten und der Empfänger sollen alle Emailadressen der User aus einer bestimmten Usergroup sein.

    Hier mal das was ich bereits habe:

    1. <?php
    2. class tx_notification_tcemainprocdm {
    3.  
    4. function processDatamap_postProcessFieldArray ($status, $table, $id, &$fieldArray, &$reference) {
    5. // $table is the current table being processed
    6. // $id is the record's id (uid field)
    7. // $fieldArray has all the fields that have BEEN CHANGED, so not all the fields, just those that have been updated
    8. // $reference is a reference to the currently calling object, the object that calls this hook
    9. // In our case, let's write a simple example that checks for our table, and outputs the changed data to the screen, what
    10. // you do from here on, it depends on the desired functionality...
    11.  
    12. // E-Mail Adressen
    13. $email_adressen ="email@test.de";
    14. $emails_in_array=explode("||",$email_adressen);
    15.  
    16. // Nachricht
    17. $messageNew = "Hello Username,\n\nThere are some new News.\n\nBest regards";
    18. $messageUpdate = "Hello Username,\n\nThere are some changes on these News entry.\n\nBest regards";
    19.  
    20. // Falls Zeilen laenger als 70 Zeichen sind
    21. $message = wordwrap($message, 70);
    22.  
    23. // E-Mail Absenderinformationen
    24. $from = "From: Test News-Information <noreply@test.de>";
    25. $betreffNew = "Test News-Information";
    26. $betreffUpdate = "Test News-Information";
    27.  
    28. if ($table == 'tt_news') {
    29. switch ($status) {
    30. case 'new':
    31. foreach($emails_in_array as $email) {
    32. mail($email,$betreffNew,$messageNew,$from);
    33. }
    34. break;
    35. case 'update':
    36. foreach($emails_in_array as $email) {
    37. mail($email,$betreffUpdate,$messageUpdate,$from);
    38. }
    39. break;
    40. }
    41. }
    42. }
    43. }
    44.  
    45.  
    46.  
    47. ?>

    Kann mir jemand sagen wie das geht? Bin noch der absolute Anfänger in Sachen Extensionentwicklung...
    GLG

  • Hilfreichster Beitrag

  • vince vince
    Sternenflotten-Admiral
    1 x
    180 Beiträge
    6 Hilfreiche Beiträge
    10. 03. 2014, 12:17 - Hilfreichster Beitrag

    hallo,

    die Mail-Adressen von den FE-Nutzern müssen aus der Datenbank ausgelesen werden.
    z.B. so:

    1. $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('distinct email','fe_users','FIND_IN_SET('<groupID>', usergroup) > 0');

    <groupID> muss natürlich durch die ID der fe_group ersetzt werden.

    Und der Inhalt der tt_news steht in der Variable $fieldArray drinn (alle Felder die geändert bzw. neu angelegt wurden).
    Titel der News auslesen: $fieldArray['title']


  • vince vince
    Sternenflotten-Admiral
    1 x
    180 Beiträge
    6 Hilfreiche Beiträge
    10. 03. 2014, 12:17

    hallo,

    die Mail-Adressen von den FE-Nutzern müssen aus der Datenbank ausgelesen werden.
    z.B. so:

    1. $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('distinct email','fe_users','FIND_IN_SET('<groupID>', usergroup) > 0');

    <groupID> muss natürlich durch die ID der fe_group ersetzt werden.

    Und der Inhalt der tt_news steht in der Variable $fieldArray drinn (alle Felder die geändert bzw. neu angelegt wurden).
    Titel der News auslesen: $fieldArray['title']

  • danila danila
    Padawan
    0 x
    47 Beiträge
    0 Hilfreiche Beiträge
    10. 03. 2014, 14:45

    Vielen Dank für deine Antwort Vince!!!
    Ich hoff die Frage ist nicht all zu blöd aber wie genau bekomm ich das jetzt zusammen?
    So ist auf jeden Fall nicht richtig...

    1. $email_adressen ='GLOBALS['TYPO3_DB']->exec_SELECTgetRows('distinct email','fe_users','FIND_IN_SET('<groupID>', usergroup) > 0');';

    und eben so wenig:

    1. $messageNew = "$fieldArray['title']";

    Kannst du mir da bitte noch mal kurz auf die Sprünge helfen?

  • vince vince
    Sternenflotten-Admiral
    0 x
    180 Beiträge
    6 Hilfreiche Beiträge
    10. 03. 2014, 15:10

    auf jeden Fall müssen die Anführungszeichen da raus:

    1. $email_adressen = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('distinct email','fe_users','FIND_IN_SET('<groupID>', usergroup) > 0');

    und
    1. $messageNew = $fieldArray['title'];

    oder

    1. print_r($fieldArray); // oder var_dump($fieldArray);

    dann sieht man, was da so alles drinnsteht

  • danila danila
    Padawan
    0 x
    47 Beiträge
    0 Hilfreiche Beiträge
    10. 03. 2014, 16:58

    Das mit der Nachricht funktioniert super :)
    Irgendwo hängt es aber noch bei den Usern. Ich bekomm beim einsetzten von

    1. $email_adressen = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('distinct email','fe_users','FIND_IN_SET('<groupID>', usergroup) > 0');

    in meinem Editor einen Syntaxfehler angezeigt und wenn ich im Backend die Änderung speichern möchte bleibt die Seite leer und die Änderung wird nicht gespeichert. Liegt daran denk ich mal, das der Hook vorher ausführt hat und da noch irgendwo ein Fehler drinnen ist.
    Müssen die Aufzählungen email, fe_users vielleicht nicht mit $email geschrieben werden?

  • vince vince
    Sternenflotten-Admiral
    0 x
    180 Beiträge
    6 Hilfreiche Beiträge
    10. 03. 2014, 17:10

    oh ja stimmt, da ist ein Fehler in dem Beispiel

    1. $email_adressen = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('distinct email','fe_users',"FIND_IN_SET('<groupID>', usergroup) > 0");

    (doppelte Anführungszeichen statt einfachen)

  • danila danila
    Padawan
    0 x
    47 Beiträge
    0 Hilfreiche Beiträge
    10. 03. 2014, 17:31

    ja vielen dank jetzt ist der code fehlerfrei...
    Aber geht noch leider nicht :(

    1. $email_adressen = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('distinct email','fe_users',"FIND_IN_SET('3', usergroup) > 0");

    Alle fe_user sind bei mir in der Usergroup 3. Hast du noch eine Idee woran das liegt?

  • vince vince
    Sternenflotten-Admiral
    1 x
    180 Beiträge
    6 Hilfreiche Beiträge
    10. 03. 2014, 17:47

    hmm, versuch mal ohne Anführungszeichen...
    FIND_IN_SET(3,usergroup) > 0

  • danila danila
    Padawan
    0 x
    47 Beiträge
    0 Hilfreiche Beiträge
    20. 03. 2014, 13:43

    Hi Vince,
    danke noch mal für deine Hilfe....hab inzwischen noch einiges angepasst. Ich steh jetzt gerade vor dem Problem, dass ich die Category auslesen möchte. Das wollte ich über "Join" realisieren. Das Problem ist jedoch, das ich hierzu die UID des neuen Elementes brauche. Obwohl ich das Element in der Datenbank sehe ist die UID anscheinend zu dem Zeitpunkt zu dem der Hook greift noch nicht existent. Ich hab jetzt versucht die function auf "processDatamap_afterDatabaseOperations" umzustellen, nur leider hat das nichts gebracht.
    Das selbe Problem hab ich, wenn ich einen Link in die Email einbauen möchte, das auf die aktuelle News verweist.
    Weißt du vielleicht wie ich die UID des Elementes bekomme?

  • vince vince
    Sternenflotten-Admiral
    1 x
    180 Beiträge
    6 Hilfreiche Beiträge
    21. 03. 2014, 09:39

    Wenn der Datensatz neu angelegt wird ($status == "new"), dann gibt's noch keine Uid.

    Folgendes sollte helfen:

    1. $uid = $id ;
    2.  
    3. if ($status=="new")
    4. $uid = $reference->substNEWwithIDs[$id];