web-dev-qa-db-ja.com

simplenewsモジュールをajax化する方法は?

Simplenewsモジュールをインストールして有効にし、ウェブサイトのフロントページにニュースレターの購読ブロックがあります。そのブロックの購読のボタンをajax化するので、それについて多くのWebサイトをググりましたが、「drupal 7のsimplenews購読フォームをajax化する方法」に関する回答は見つかりませんでしたか?

3
FarhangDarzi

pbonnefoi の回答に加えて、送信をより簡単にすることができます。

/**
 * Ajax callback for simplenews
 */
function CUSTOMMODULE_simplenews_form_ajax_submit($form, &$form_state) {
  if (!valid_email_address($form_state['values']['mail'])) {
    drupal_set_message(t('The e-mail address %mail is not valid.', array('%mail' => $form_state['values']['mail'])), 'error');
  }
  else {
    module_load_include('inc', 'simplenews', 'views/simplenews.subscription');
    simplenews_block_form_submit($form, $form_state);
  }
  return render($form);
}
1
Nikit

あなたがあなたの答えを見つけたかどうかはわかりませんが、同じ問題があり、解決策を見つけました:

hook_form_alter

  if ($form_id == 'simplenews_block_form_' . variable_get('simplenews_id', 23)) {
    $form['submit']['#ajax'] = array(
      'callback' => 'simplenews_block_form_ajax_submit',
      'wrapper' => 'block-simplenews-' . variable_get('simplenews_id', 23),
      'method' => 'replace',
      'effect' => 'fade',
      'progress' => array('type' => 'none'),
    );
    $form['submit']['#executes_submit_callback'] = TRUE;
    unset($form['#submit']);
    unset($form['#validate']);
  }

そしてajaxで送信する

/**
 * Ajax callback to reload the image field
 */
function simplenews_block_form_ajax_submit($form, $form_state) {
  $return = '<div id="block-simplenews-23" class="block block-simplenews first odd">';
  $return .= '<h2 class="block__title block-title">' . t('Newsletter') . '</h2>';
  $return .= render($form);
  $return .= '</div>';
  if (!valid_email_address($form_state['values']['mail'])) {
    $return .= '<section class="errors-primal">' . t('The e-mail address is not valid.') . '</section>';
    return $return;
  }
  else {
    if (module_exists('simplenews')) {
      module_load_include('inc', 'simplenews', 'views/simplenews.subscription');
      $tid = $form['#tid'];
      $account = simplenews_load_user_by_mail($form_state['values']['mail']);
      $confirm = simplenews_require_double_opt_in($tid, $account);
      $subscription = simplenews_subscribe_user($form_state['values']['mail'], $tid, $confirm, 'website');
      $return .= '<section class="confirm-primal">' . t('You have been subscribed.') . '</section>';
      return $return;
    }
  }
}

これにより、AJAXでデータベースに簡単に登録されます。正確に必要なものに応じて適応できます。

1
pbonnefoi