2016-04-13 15 views
0

Ich habe derzeit ein einfaches einfaches Newsletter-Anmeldeformular in der Fußzeile unserer Website mit nur einem E-Mail-Textfeld. Wir möchten wissen, auf welcher Sprachversion unsere Abonnenten unser Formular ausfüllen. (domain.com/ nl /. de /. es usw.).MailChimp API und AJAX fügen ein verstecktes Feld hinzu

Ich habe ein verstecktes Feld hinzugefügt, das den Wert der aktuellen Sprache erhält.

<li> 
    <label for="footer-newsletter-input"><?php __("nav.newsletter.youremail"); ?></label> 
    <input type="text" id="footer-newsletter-input" class="font-MuseoSans100 validate" data-validationtype="email"> 
    </li> 

    <li class="hidden"> 
    <input type="text" id="footer-newsletter-input-language" class="font-MuseoSans100" value="<?php echo isset(Language::$short) ? Language::$short : 'en'; ?>"> 
    </li> 

Dies funktioniert.

Unsere aktuellen initNewsletter: function() ist wie folgt:

initNewsletter: function() { 

     $(document).on('submit', '#newsletter_form', function(e){ 

      e.preventDefault(); 
      $('#newsletter-holder p.error').hide(); 

      if($(this).hasClass('loading')) return; 

      var form = $(this), 
       valid = checkForm(form), 
       email = $('#footer-newsletter-input').val(); 
      ??? shortlangcode = $('#footer-newsletter-input-language'); ??? 



      if(valid) { 

       form.addClass('loading'); 

       $.ajax({ 
        type: 'post', 
        url: '/support/subscribe', 
        data: 'email=' + email, ?????? 
        success: function(data){ 

         form.removeClass('loading'); 

         data = $.parseJSON(data); 
         if(data.status && data.status === 'error') { 
          $('#newsletter-holder').append('<p class="error font-MuseoSans100">' + window.globalTranslations.newsletter_error + '</p>'); 
         } else { 
          $('#newsletter-inputs').fadeOut(150, function(){ 
           $('#newsletter-thanks').show(); 
          }); 

         } 


        }, 
        error: function(){ 
         $('#newsletter-holder').append('<p class="error font-MuseoSans100">' + window.globalTranslations.newsletter_error + '</p>'); 
        } 
       }); 

      } 

     }); 

    }, 

Und der Controller sieht wie folgt aus:

public function subscribe() { 

    // API KEY 
    $apikey = '????'; 
    $listid = '????'; 

    $MailChimp = new MailChimp($apikey); 
    $result = $MailChimp->call('lists/subscribe', array(
     'id'    => $listid, 
     'email'    => array('email'=>$_POST['email']), 
     //'merge_vars'  => array('FNAME'=>$_POST['fname'], 'LNAME'=>$_POST['lname']), 
     'double_optin'  => true, 
     'update_existing' => true, 
     'replace_interests' => false, 
     'send_welcome'  => false, 
    )); 

    echo json_encode($result); 

} 
+0

Was ist das Problem? – TooMuchPete

+0

Ich kann nicht herausfinden, wie man den Wert der Eingabe mit ID = "footer-newsletter-input-language" an mailchimp sendet. Ich denke, ich muss den Wert in initNewsletter deklarieren: function() und mit Ajax-Post senden. (Ich habe ???? an der Stelle hinzugefügt ich denke, es muss hinzugefügt werden) Und dann muss der Controller aktualisiert werden, um merge_vars => ('CNTRCODE' => $ _POST ['cntrcode']), – m00n

Antwort

0

Sie erhalten eine name Parameter zu Ihrem Formularfeld hinzufügen müssen . So könnte es dies geworden:

<input type="text" id="footer-newsletter-input-language" name="language" class="font-MuseoSans100" value="<?php echo isset(Language::$short) ? Language::$short : 'en'; ?>"> 

Dann in Ihrem Controller, greifen Sie es wie folgt aus:

$result = $MailChimp->call('lists/subscribe', array(
    'id'    => $listid, 
    'email'    => array('email'=>$_POST['email']), 
    'merge_vars'  => array('CNTRCODE'=>$_POST['language']), 
    'double_optin'  => true, 
    'update_existing' => true, 
    'replace_interests' => false, 
    'send_welcome'  => false, 
)); 

Sie werden dafür sorgen, dass ein Seriendruckfeld CNTRCODE genannt wird, dass innerhalb von MailChimp erstellt Liste.

+0

Hinzugefügt die Linien scheinen aber nicht zu funktionieren. Ich denke, ich muss die Sprache auch im initNewsletter hinzufügen: function() um es zu deklarieren und zu senden. – m00n

+0

Was meinst du mit "scheint nicht zu funktionieren"? Wird der Benutzer überhaupt abonniert? CNTRCODE fehlt? Haben Sie sich die rohe Anfrage schon angesehen? – TooMuchPete