[Frage] Powermail 2.0.19 und Signalslots TYPO3-Version: 6.1.1

  • fahn fahn
    Padawan
    0 x
    54 Beiträge
    2 Hilfreiche Beiträge
    13. 02. 2015, 19:47

    Hallo *,

    ich habe eine Typo3-Webseite in der Version 6.1.12 am laufen. In dieser kommt auch powermail 2.0.19 zum Einsatz. In einem Formular möchte ich gerne, dass nach dem Eintragen, Validieren ein Wert vor dem Versenden in Speichern in die DB manipuliert wird. Dazu habe ich die SignalSlots genutzt: Tx_Powermail_Controller_FormsController

    Damit ich wie gewünscht auf die Felder vor dem Versenden und Speichern in die DB darauf zugreifen kann.

    Folgenden Code habe ich erstellt und das funktioniert auch in den DEBUG-Ausgaben, aber leider arbeitet er danach nicht mit dem neuen Wert, sondern wieder mit dem alten:

    1. class Tx_Powermailext_receiver extends Tx_Powermail_Controller_FormsController {
    2. function callMe($field, $form, $mail, $controller) {
    3. \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($field); // Wert mit dem Index 75: 2
    4. $field[75] = 3; // Vorher war der Wert 2 und er soll auf 3 manipuliert werden
    5. \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($field); // Wert mit dem Index 75: 3
    6. }
    7. }
    8. // Ich werde da später natürlich eine andere Funktion hinterlegen aber zur Ansicht reicht das ja :)

    Was kann ich da tun, dass auch danach der Wert die Zahl 3 hat ?

    // EDIT
    Wenn ich in der Datei beim Aufruf des Signal Slots den Wert ändere, dann funktioniert das:

    1. $this->signalSlotDispatcher->dispatch(__CLASS__, __FUNCTION__ . 'BeforeRenderView', array($field, $form, $mail, $this));
    2. $field[75] = 3;

    Gruß,
    fahn


  • 1
  • einpraegsam.net einpraegs...
    MacGyver
    0 x
    9340 Beiträge
    80 Hilfreiche Beiträge
    15. 02. 2015, 14:03

    Ich habe im Handbuch der aktuellen Version von powermail beschrieben, wie man Werte ändern kann - siehe http://docs.typo3.org/typo3cms/extensions/powermail/ForDevelopers/SignalSlots/Index.html
    Dort wird zwar nur die Mail-Adresse geändert, aber genauso sollten sich Werte beim Speichern überschreiben lassen.

    Für die alte Version habe ich kein Beispiel parat, aber was ist wenn du den Slot CreateActionAfterSubmitView nutzt und dort das Mail-Object direkt änderst?

    Ganz davon abgesehen, dass die verwendete TYPO3-Version keine Sicherheitsupdates mehr erhält und du dringend auf 6.2 updaten solltest.

    in2code.de - Wir leben TYPO3
    - Möchtest du TYPO3 komplett verstehen? Eigene Erweiterungen erstellen? Bei uns gibt es auch Schulungen https://www.in2code.de/produkte/typo3-schulungen/
    - Die Arbeit mit TYPO3 macht dir Spaß? Du stehst auf Berge? Komm zu uns! https://www.in2code.de/agentur/karriere/

  • fahn fahn
    Padawan
    0 x
    54 Beiträge
    2 Hilfreiche Beiträge
    15. 02. 2015, 21:55

    Hey,
    danke erst einmal für die Antwort! Also die SignalSlots gab es auch schon in 2.0.x ... Daher funktioniert der Ansatz. Ich nutze diesen einen ja auch ..
    Laut dem Code(FormController.php) ist dort sogar der beschriebene sogar vorhanden, nur funktionieren tut er nach meiner Ansicht nicht! Wenn ich um die Zeile wo der SignalSlot aufgerufen wird die Werte von Hand wie im 2. Code-Auschnitt verändere, dann klappt dies ja ...

    PS: Nicht jede HP verträgt 6.2 und die Updates
    PS2: mittlerweile ist auch powermail 2.0.20 raus gekommen ... Trotzdem keine Änderung

  • fahn fahn
    Padawan
    0 x
    54 Beiträge
    2 Hilfreiche Beiträge
    16. 02. 2015, 13:08

    Hey,
    also ich habe zum test mal auf 6.2.9 geupgraded + die aktuelle powermail 2.1.x -Version am laufen.
    Da klappt das Beispiel was du verlinkt hast, aber wenn ich das einfach auf meine Thematik anpasse, dann klappt das nicht! Könnte es sein, dass dort ein Fehler im Code exisiert ? Weil nicht nur der Signal-Slot funktioniert aus der Klasse FormController nicht :(

    Hier mein Code:

    ext_localconf.php

    1. // klappt nicht
    2. $signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Extbase\SignalSlot\Dispatcher');
    3. $signalSlotDispatcher->connect(
    4. '\In2code\Powermail\Controller\FormController',
    5. 'createActionBeforeRenderView',
    6. 'In2code\Powermailext\Utility\SendMail',
    7. 'callMe',
    8. FALSE
    9. );
    10.  
    11. // klappt nicht
    12. $signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Extbase\SignalSlot\Dispatcher');
    13. $signalSlotDispatcher->connect(
    14. '\In2code\Powermail\Controller\FormController',
    15. 'formActionBeforeRenderView',
    16. 'In2code\Powermailext\Utility\SendMail',
    17. 'callMe',
    18. FALSE
    19. );
    20.  
    21. // klappt
    22. $signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Extbase\SignalSlot\Dispatcher');
    23. $signalSlotDispatcher->connect(
    24. 'In2code\Powermail\Utility\SendMail',
    25. 'sendTemplateEmailBeforeSend',
    26. 'In2code\Powermailext\Utility\SendMail',
    27. 'manipulateMail',
    28. FALSE
    29. );

    sendMail.php

    1. <?php
    2. namespace In2code\powermailext\Utility;
    3.  
    4. /**
    5.  * SendMail
    6.  *
    7.  * @package powermailextend
    8.  * @license http://www.gnu.org/licenses/lgpl.html
    9.  * GNU Lesser General Public License, version 3 or later
    10.  */
    11. class SendMail {
    12.  
    13. /**
    14.   * @param \TYPO3\CMS\Core\Mail\MailMessage $message
    15.   * @param array $email
    16.   * @param \In2code\Powermail\Domain\Model\Mail $mail
    17.   * @param array $settings
    18.   * @param string $type Email to "sender" or "receiver"
    19.   */
    20. public function manipulateMail($message, $email, $mail, $settings, $type) {
    21. die("manipulateMail");
    22. }
    23.  
    24. function callMe($field, $form, $mail, $controller) {
    25. die("callme");
    26. }
    27. }
    28. ?>

    Mir ist klar, dass sich das eine DIE auf das andere auswirkt, daher habe ich zum testen jeweils das andere DIE auskommentiert. Aber wenn nur die("callme") aktiv ist, dann läuft das form einwandfrei durch! Was ja nicht sein dürfte!

    Gruß,

    // Nachtrag
    Hier noch etwas aus dem var_dump von der Variable $this->signalSlotDispatcher nach dem Aufruf vom Signal Slot in der Datei FormController.php (Zeile ~115[direkt nach dem Aufruf des SignalSlots in der Methode createAction])

    1. TYPO3\CMS\Extbase\SignalSlot\Dispatchersingletonobject
    2. isInitialized => TRUE
    3. objectManager => TYPO3\CMS\Extbase\Object\ObjectManagersingletonobjectfiltered
    4. slots => array(5 items)
    5. TYPO3\CMS\Core\Resource\ResourceStorage => array(1 item)
    6. TYPO3\CMS\Core\Resource\Index\MetaDataRepository => array(1 item)
    7. TYPO3\CMS\Install\Service\SqlExpectedSchemaService => array(1 item)
    8. \In2code\Powermail\Controller\FormController => array(2 items)
    9. createActionBeforeRenderView => array(1 item)
    10. 0 => array(4 items)
    11. class => 'In2code\Powermailext\Utility\SendMail' (38 chars)
    12. method => 'callme' (6 chars)
    13. object => NULL
    14. passSignalInformation => FALSE
    15. formActionBeforeRenderView => array(1 item)
    16. 0 => array(4 items)
    17. class => 'In2code\Powermailext\Utility\SendMail' (38 chars)
    18. method => 'callme' (6 chars)
    19. object => NULL
    20. passSignalInformation => FALSE
    21. In2code\Powermail\Utility\SendMail => array(1 item)
    22. sendTemplateEmailBeforeSend => array(1 item)
    23. 0 => array(4 items)
    24. class => 'In2code\Powermailext\Utility\SendMail' (38 chars)
    25. method => 'manipulateMail' (14 chars)
    26. object => NULL
    27. passSignalInformation => FALSE

  • einpraegsam.net einpraegs...
    MacGyver
    0 x
    9340 Beiträge
    80 Hilfreiche Beiträge
    21. 02. 2015, 10:01

    Ich verstehe noch nicht ganz, was du mir damit sagen willst. Beim Aufruf eines Signals muss der Klassenname immer ohne Leadingslash geschrieben werden.

    in2code.de - Wir leben TYPO3
    - Möchtest du TYPO3 komplett verstehen? Eigene Erweiterungen erstellen? Bei uns gibt es auch Schulungen https://www.in2code.de/produkte/typo3-schulungen/
    - Die Arbeit mit TYPO3 macht dir Spaß? Du stehst auf Berge? Komm zu uns! https://www.in2code.de/agentur/karriere/

  • fahn fahn
    Padawan
    0 x
    54 Beiträge
    2 Hilfreiche Beiträge
    24. 02. 2015, 17:59

    Danke, das war es :P

    Hatte es aus dem Manual kopiert!

  • 1