diff --git a/modules/mailchimp_signup/config/schema/mailchimp_signup.schema.yml b/modules/mailchimp_signup/config/schema/mailchimp_signup.schema.yml index 562ce01..967e516 100644 --- a/modules/mailchimp_signup/config/schema/mailchimp_signup.schema.yml +++ b/modules/mailchimp_signup/config/schema/mailchimp_signup.schema.yml @@ -62,6 +62,9 @@ mailchimp_signup.mailchimp_signup.*: destination: type: string label: 'Destination' + ajax: + type: boolean + label: 'Ajax form submit' mergefields: type: sequence label: 'Mergefields' diff --git a/modules/mailchimp_signup/src/Form/MailchimpSignupForm.php b/modules/mailchimp_signup/src/Form/MailchimpSignupForm.php index 59cff01..5937431 100644 --- a/modules/mailchimp_signup/src/Form/MailchimpSignupForm.php +++ b/modules/mailchimp_signup/src/Form/MailchimpSignupForm.php @@ -153,6 +153,13 @@ class MailchimpSignupForm extends EntityForm { '#default_value' => isset($signup->settings['destination']) ? $signup->settings['destination'] : NULL, ); + $form['settings']['ajax_submit'] = array( + '#type' => 'checkbox', + '#title' => t('AJAX Form Submit Mode'), + '#description' => t('Select if signup form submit should use AJAX instead of default page reload. Destination page will be ignored if checked.'), + '#default_value' => isset($signup->settings['ajax_submit']) ? $signup->settings['ajax_submit'] : FALSE, + ); + $form['mc_lists_config'] = array( '#type' => 'details', '#title' => $this->t('Mailchimp Audience Selection & Configuration'), diff --git a/modules/mailchimp_signup/src/Form/MailchimpSignupPageForm.php b/modules/mailchimp_signup/src/Form/MailchimpSignupPageForm.php index 8c31251..96c612b 100644 --- a/modules/mailchimp_signup/src/Form/MailchimpSignupPageForm.php +++ b/modules/mailchimp_signup/src/Form/MailchimpSignupPageForm.php @@ -2,6 +2,10 @@ namespace Drupal\mailchimp_signup\Form; +use Drupal\Component\Utility\Html; +use Drupal\Core\Ajax\AjaxResponse; +use Drupal\Core\Ajax\ChangedCommand; +use Drupal\Core\Ajax\HtmlCommand; use Drupal\Core\Form\FormBase; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Url; @@ -80,6 +84,16 @@ class MailchimpSignupPageForm extends FormBase { '#markup' => $this->signup->description, ); + // If the form is configured to submit via AJAX, add an empty container + // element. This element is going to be replaced with the returned AJAX + // response. + if (isset($this->signup->settings['ajax_submit']) && $this->signup->settings['ajax_submit']) { + $form['response'] = [ + '#prefix' => '