2016-04-13 23 views
0

我目前在我们网站的页脚中只有一个电子邮件文本字段的简单简明电子报订阅表单。我们想知道我们的用户填写了我们的表单的语言版本。 (domain.com/ nl /。de /。it etc)。MailChimp API和AJAX添加一个隐藏字段

我添加了一个隐藏字段,它获取当前语言的值。

<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> 

这是行得通的。

我们目前initNewsletter:()函数如下:

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>'); 
        } 
       }); 

      } 

     }); 

    }, 

而且控制器如下所示:

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

有什么问题? – TooMuchPete

+0

我无法弄清楚如何将id =“footer-newsletter-input-language”的输入值发送到mailchimp。我想我需要在initNewsletter中声明该值:function()并用Ajax post发送它。 (我已经在我认为需要添加的地方添加了????)然后控制器需要更新以包含merge_vars =>('CNTRCODE'=> $ _POST ['cntrcode']), – m00n

回答

0

你需要一个name参数添加到您的表单字段。因此,它可能成为这样的:

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

然后,您可以访问它像这样:

$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, 
)); 

你必须确保名为CNTRCODE合并字段内mailchimp创建为名单。

+0

已添加线但似乎不工作。我想我需要在initNewsletter中添加语言:function()来声明它并发送它。 – m00n

+0

你是什么意思“似乎没有工作”?用户是否被订阅? CNTRCODE缺失?你有没有看过原始的请求/响应呢? – TooMuchPete