Simplenewsモジュールをインストールして有効にし、ウェブサイトのフロントページにニュースレターの購読ブロックがあります。そのブロックの購読のボタンをajax化するので、それについて多くのWebサイトをググりましたが、「drupal 7のsimplenews購読フォームをajax化する方法」に関する回答は見つかりませんでしたか?
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);
}
あなたがあなたの答えを見つけたかどうかはわかりませんが、同じ問題があり、解決策を見つけました:
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でデータベースに簡単に登録されます。正確に必要なものに応じて適応できます。