Contao-Camp 2024
Ergebnis 1 bis 10 von 10

Thema: Rapidmail API

  1. #1
    Contao-Fan Avatar von mapfei
    Registriert seit
    11.05.2010.
    Ort
    Much
    Beiträge
    692

    Frage Rapidmail API

    Hi zusammen,

    ich möchte gerne über eine simple Checkbox in einem Formular eine Newsletter-Anmeldung über Rapidmail steuern. Hierzu gibt es unter https://github.com/emailsys/apiv3-ex...vationmail.php ein entsprechendes Beispiel. Kann ich hiermit arbeiten? An welcher Stelle müsste ich das dann einbinden bzw. abfragen, ob die Checkbox auch gesetzt wurde?

    Grüße,
    mapfei

  2. #2
    Contao-Fan Avatar von JMMB
    Registriert seit
    08.03.2012.
    Beiträge
    260
    User beschenken
    Wunschliste

    Standard

    Hallo,

    schau Dir mal diesen Hook an.

    Grüße

  3. #3
    Contao-Fan Avatar von mapfei
    Registriert seit
    11.05.2010.
    Ort
    Much
    Beiträge
    692

    Standard

    Okay, Hook/Modul habe ich angelegt. Wie wird dieser nun ausgeführt bzw. nur auf ein bestimmtes Formular beschränkt? Sorry, mit Hooks habe ich bisher noch wenig bis keine Erfahrung, was ich aber gerne ändern möchte.

    Grüße,
    mapfei

  4. #4
    Contao-Fan Avatar von JMMB
    Registriert seit
    08.03.2012.
    Beiträge
    260
    User beschenken
    Wunschliste

    Standard

    Hi,

    Du kannst auf die Form ID abfragen:

    PHP-Code:
    if($arrForm['formID'] == 'DEINEFORMID') {} 
    Dein Code dann da rein. So kannst Du auf bestimmte Formulare einschränken.

  5. #5
    Contao-Fan Avatar von mapfei
    Registriert seit
    11.05.2010.
    Ort
    Much
    Beiträge
    692

    Frage

    Meine RapidmailClass.php sähe jetzt folgendermaßen aus:

    PHP-Code:
    class RapidmailClass extends Backend {

        public function myProcessFormData($arrPost, $arrForm, $arrFiles)
        {

            if($arrForm['formID'] == '68') {

                <?php
                
    use Camspiers\JsonPretty\JsonPretty;
                use 
    GuzzleHttp\Client;
                use 
    GuzzleHttp\Exception\ClientException;
                require_once 
    __DIR__ '/../../../vendor/autoload.php';
                
    // Recipientlist ID to add the recipient to
                
    $recipientlistId 'XXXX'// TODO specify
                // Specify api credentials
                
    $username 'XXXX'// TODO specify
                
    $password 'XXXX'// TODO specify
                
    $client = new Client([
                    
    // Base URI for all guzzle requests, remember that the emailsys API only supports HTTPS
                    
    'base_uri' => 'https://apiv3.emailsys.net'
                
    ]);
                
    // A simple utility to prettify json data
                
    $pretty = new JsonPretty();
                try {
                    
    $response $client->post('/recipients', [
                        
    // Guzzle request headers API is documented here: http://guzzle.readthedocs.io/en/stable/request-options.html#headers
                        
    'headers' => [
                            
    // The accept header tells the API that you expect JSON to be returned
                            
    'Accept' => 'application/json'
                        
    ],
                        
    // Guzzle request authentication is documented here: http://guzzle.readthedocs.io/en/stable/request-options.html#auth
                        
    'auth' => [
                            
    $username,
                            
    $password
                        
    ],
                        
    // Guzzle JSON request API is documented here: http://guzzle.readthedocs.io/en/stable/quickstart.html#uploading-data
                        
    'json' => [
                            
    'email' => 'test@example.com',
                            
    'recipientlist_id' => $recipientlistId
                        
    ]
                    ]);
                    echo 
    $pretty->prettify((string)$response->getBody()) . PHP_EOL;
                } catch (
    ClientException $e) {
                    
    // Guzzle exception handling is documented here: http://guzzle.readthedocs.io/en/stable/quickstart.html#exceptions
                    // ClientException is thrown for any 4XX HTTP statuscode (client errors)
                    
    if ($e->hasResponse()) {
                        echo 
    $pretty->prettify((string)$e->getResponse()->getBody()) . PHP_EOL;
                    }
                }

            }

        }
        
    }
    Soweit "richtig"? Wie und wo bekomme ich nun noch eine Abfrage hin, ob eine bestimmte Checkbox im Formular gesetzt wurde? Denn nur dann soll das Script ja auch ausgeführt werden und den Empfänger in der Rapidmail-Liste speichern. Der Empfänger selber kommt dann ja auch aus dem Formular und muss an der Stelle test@example.com eingebaut werden...

    Grüße,
    mapfei

  6. #6
    Contao-Fan Avatar von JMMB
    Registriert seit
    08.03.2012.
    Beiträge
    260
    User beschenken
    Wunschliste

    Standard

    Hallo,

    auf ein Feld kannst Du so abfragen:

    PHP-Code:
    if ($arrPost['FELDNAME'] == 'WERT') {/*MACHWAS*/
    Dann noch zu Abfrage auf die FormID:

    PHP-Code:
    if($arrForm['formID'] == 'meineformid') {/*MACHWAS*/}{ 
    Die trägst Du im Feld FormID des Formulargenerators ein
    Screenshot_2019-09-24 Formulargenerator › Das Formular ID 1 bearbeiten - Contao Open Source CM.png

    Du hast glaube ich die ID des Formulars genommen.


    Alles in allem dann so im Gerüst (ungetestet):

    PHP-Code:
    <?php if (!defined('TL_ROOT')) die('You cannot access this file directly!');
    class 
    MeinHook extends Backend {

        public function 
    myProcessFormData($arrPost$arrForm$arrFiles) {

            if(
    $arrForm['formID'] == 'meineformid') {

                if (
    $arrPost['meinfeldname'] == 'ja') {
                    
    /*WAS AUCH IMMER DU MACHEN WILLST*/
                
    }
                
            }
        }
    }

  7. #7
    Contao-Fan Avatar von mapfei
    Registriert seit
    11.05.2010.
    Ort
    Much
    Beiträge
    692

    Frage

    Prima, danke! Wieder einen Step weiter. Mein Script sieht nun so aus:

    PHP-Code:
    <?php if (!defined('TL_ROOT')) die('You cannot access this file directly!');

    class 
    RapidmailClass extends Backend {

        public function 
    myProcessFormData($arrPost$arrForm$arrFiles)
        {

            if(
    $arrForm['formID'] == 'vorteil-test') {

                if (
    $arrPost['newsletter'] == 'ja') {
              
                    use 
    Camspiers\JsonPretty\JsonPretty;
                    use 
    GuzzleHttp\Client;
                    use 
    GuzzleHttp\Exception\ClientException;
                    require_once 
    __DIR__ '/../../../vendor/autoload.php';
                    
    $recipientlistId 'XXXX';
                    
    $username 'XXXX';
                    
    $password 'XXXX';
                    
    $client = new Client([
                        
    // Base URI for all guzzle requests, remember that the emailsys API only supports HTTPS
                        
    'base_uri' => 'https://apiv3.emailsys.net'
                    
    ]);
                    
    // A simple utility to prettify json data
                    
    $pretty = new JsonPretty();
                    try {
                        
    $response $client->post('/recipients', [
                            
    // Guzzle request headers API is documented here: http://guzzle.readthedocs.io/en/stable/request-options.html#headers
                            
    'headers' => [
                                
    // The accept header tells the API that you expect JSON to be returned
                                
    'Accept' => 'application/json'
                            
    ],
                            
    // Guzzle request authentication is documented here: http://guzzle.readthedocs.io/en/stable/request-options.html#auth
                            
    'auth' => [
                                
    $username,
                                
    $password
                            
    ],
                            
    // Guzzle JSON request API is documented here: http://guzzle.readthedocs.io/en/stable/quickstart.html#uploading-data
                            
    'json' => [
                                
    'email' => 'test@example.com',
                                
    'recipientlist_id' => $recipientlistId
                            
    ]
                        ]);
                        echo 
    $pretty->prettify((string)$response->getBody()) . PHP_EOL;
                    } catch (
    ClientException $e) {
                        
    // Guzzle exception handling is documented here: http://guzzle.readthedocs.io/en/stable/quickstart.html#exceptions
                        // ClientException is thrown for any 4XX HTTP statuscode (client errors)
                        
    if ($e->hasResponse()) {
                            echo 
    $pretty->prettify((string)$e->getResponse()->getBody()) . PHP_EOL;
                        }
                    }
                }
            }
        }
    }
    Binde ich es so ein, wirft die Seite beim Absenden eines Formulars jedoch folgenden Fehler aus:

    Code:
    [2019-09-25 08:21:20] request.INFO: Matched route "contao_frontend". {"route":"contao_frontend","route_parameters":{"_token_check":true,"_controller":"Contao\\CoreBundle\\Controller\\FrontendController::indexAction","_scope":"frontend","alias":"formular-vorteilsangebote","_route":"contao_frontend"},"request_uri":"//formular-vorteilsangebote?angebot=Viking","method":"POST"} []
    [2019-09-25 08:21:20] security.INFO: Attempting SimplePreAuthentication. {"key":"frontend","authenticator":"Contao\\CoreBundle\\Security\\ContaoAuthenticator"} []
    [2019-09-25 08:21:22] app.CRITICAL: An exception occurred. {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\ClassNotFoundException(code: 0): Attempted to load class \"RapidmailClass\" from the global namespace.\nDid you forget a \"use\" statement? at //vendor/contao/core-bundle/src/Resources/contao/library/Contao/System.php:171)"} []

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

    Standard

    Wo liegt denn Deine RapidmailClass.php und hast Du Contao "gesagt", wie sie gefunden werden kann?

    Stichwort "Autoloader": Hier ist beschrieben, wie man es machen kann. Auch, wenn es für einen anderen Hook ist, bleibt das Prinzip das gleiche.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  9. #9
    Contao-Fan Avatar von mapfei
    Registriert seit
    11.05.2010.
    Ort
    Much
    Beiträge
    692

    Standard

    Ich habe einen Ordner system/modules/rapidmail angelegt und darin befindet sich im Verzeichnis config eine Datei namens

    config.php
    PHP-Code:
    $GLOBALS['TL_HOOKS']['processFormData'][] = array('RapidmailClass''myProcessFormData'); 
    und in system/modules/rapidmail die Datei RapidmailClass.php mit besagtem Inhalt.

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

    Standard

    system/modules/ ist der Contao 3 Weg bei dem es eine config/autoload.php braucht. Der im oben verlinkten Blogeintrag beschriebene Weg ist der Weg, der unter Contao 4 funktioniert, ohne darauf zu bauen, daß C4 rückwärtskompatibel zu C3 ist.

    Wie rum auch immer, Bei Dir fehlt Contao noch die Info, wie die Klasse gefunden werden soll.
    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)

Lesezeichen

Lesezeichen

Berechtigungen

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