Здравствуйте. Столкнулся с проблемой. В друпале я новичок. Взялся доделать один сайт на этой CMS и столкнулся с проблемой в форме, которая должна по ajax запросу отправлять письмо.
Однако на данном этапе я вообще не могу понять что и куда она отправляет. Попытки вызвать хоть какой ответ вернули пустоту.
<?php
/**
* file
* This is the main module file.
*/
/**
* Implements hook_help().
*/
function wedding_request_help($path, $arg) {
if ($path == 'admin/help/wedding_request') {
$output = '<h3>' . t('About') . '</h3>';
$output .= '<p>' . t('Модуль формы заявки свадьбы') . '</p>';
return $output;
}
}
function
wedding_request_menu() {
$items = array();
$items['wedding_request/request'] = array(
'title' => 'Request wedding',
'page callback' => 'wedding_request_callback',
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
$items['admin/config/system/wedding_request'] = array(
'title' => t('Proposition settings'),
'description' => t('Описание акции для формы заявки'),
'page callback' => 'drupal_get_form',
'page arguments' => array('wedding_request_admin'),
'access arguments' => array('administer wedding_request settings'),
'type' => MENU_NORMAL_ITEM,
);
return
$items;
}
function
wedding_request_theme() {
return array (
'request_form_wrapper' => array (
'render element' => 'form',
),
);
}
function
theme_request_form_wrapper($variables) {
$form = $variables['form'];
$output = '<div id="wedding-request">';
$output .= '<div class="divider"></div>';
$output .= '<div class="proposition">';
$output .= '<div class="title">';
$output .= t('Только до 5 апреля при подаче заявки съемка LOVE-STORY в подарок!');
$output .= '</div>';
$output .= '<div class="active">';
$output .= '<div class="text">' . t('Предложение активно еще:') . '</div>';
$output .= '<div id="CDT"></div>';
$output .= '</div>';
$output .= '</div>';
$output .= '<div class="fields">';
$output .= '<h3>' . t('Я хочу такую же необычную свадьбу') . '</h3>';
$output .= drupal_render($form['name']);
$output .= drupal_render($form['phone']);
$output .= drupal_render($form['email']);
$output .= drupal_render($form['comment']);
$output .= drupal_render($form['actions']);
$output .= '</div>';
$output .= '</div>';
return $output;
}
function
wedding_request_callback() {
$commands = array();
if (!form_get_errors()) {
// No form error, Lets print a login successful message
// And do a page reload
$commands[] = ajax_command_html('#wedding-request-error', t('OK'));
$settings_data = array('wedding-request_reload' => TRUE);
array_unshift($commands, ajax_command_settings($settings_data, FALSE));
}
else {
// throw out errors
$commands[] = ajax_command_html('#wedding-request-error', theme('status_messages'));
}
return array('#type' => 'ajax', '#commands' => $commands);
}
function
wedding_request_block_info() {
$blocks['wedding_request'] = array(
'info' => 'Wedding Request Block',
);
return $blocks;
}
function
wedding_request_block_view($delta = 0) {
$block = array();
$block['content'] = drupal_get_form('wedding_request_form');
return $block;
}
function
wedding_request_form($form) {
$form['errors'] = array('#markup' => '<div id="wedding-request-error"></div>');
// Get the path to the module
$path = drupal_get_path('module', 'wedding_request');
// Attach the CSS and JS to the form
$form['#attached'] = array (
'css' => array (
'type' => 'file',
'data' => $path . '/css/style.css',
),
// 'js' => array
// (
// 'type' => 'file',
// 'data' => $path . '/css/form.js',
// ),
);
$form['#action'] = url($_GET['q'], array('query' => drupal_get_destination()));
$form['#id'] = 'wedding-request-form';
// $form['#validate'] = wedding_request_validators();
$form['#submit'][] = 'wedding_request_submit';
$form['name'] = array('#type' => 'textfield',
'#maxlength' => 100,
'#size' => 15,
'#required' => TRUE,
'#attributes' => array('placeholder' => t('Меня зовут')),
);
$form['phone'] = array('#type' => 'textfield',
'#maxlength' => 20,
'#size' => 15,
'#required' => TRUE,
'#attributes' => array('placeholder' => t('Мой телефон')),
);
$form['email'] = array('#type' => 'textfield',
'#maxlength' => 64,
'#size' => 15,
'#required' => TRUE,
'#attributes' => array('placeholder' => t('Моя эл. почта')),
);
$form['comment'] = array('#type' => 'textarea',
'#size' => 15,
'#required' => TRUE,
'#attributes' => array('placeholder' => t('Я очень хочу свадьбу, которая...')),
'#resizable' => false,
);
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Свяжитесь со мной'),
'#ajax' => array(
'callback' => 'wedding_request_callback',
),
);
$form['#theme'] = 'request_form_wrapper';
return
$form;
}
function
wedding_request_validators($form, &$form_state) {
}
function
wedding_request_submit($form, &$form_state) {
drupal_set_message(t('The form has been submitted.'));
}
function
wedding_request_admin() {
$form = array();
$form['proposition_enable'] = array(
'#type' => 'checkbox',
'#title' => t('Дополнительное предложение'),
'#default_value' => variable_get('wedding_request_proposition-enable', 0),
);
$form['proposition_title'] = array(
'#type' => 'textarea',
'#default_value' => variable_get('wedding_request_proposition-title',
'Текст акции'),
'#title' => t('Текст акции'),
);
$date = 'Y-m-d H:i:s';
$format = 'Y-m-d H:i';
$form['proposition_expired'] = array(
'#type' => 'date_select',
'#default_value' => variable_get('wedding_request_proposition-expired',
$date),
'#date_format' => $format,
'#title' => t('Акция истекает'),
);
$form = system_settings_form($form);
$form['#submit'][] = 'wedding_request_admin_submit';
return $form;
}
function
wedding_request_admin_submit($form, &$form_state) {
variable_set('wedding_request_proposition-enable',
$form_state['values']['proposition_enable']);
variable_set('wedding_request_proposition-title',
$form_state['values']['proposition_title']);
variable_set('wedding_request_proposition-expired',
$form_state['values']['proposition_expired']);
drupal_set_message(t('The settings have been saved'));
}
?>
Код модуля с формой. Помогите пожалуйста разобраться. Второй день бьюсь с ней. Форма строится. Даже переменные формы куда-то отправляются. Но где и главное как их обработать, ума не приложу.
Мне бы вычислить куда передаются данные, дальше я сам попробую докавырять.
Комментарии
Данные передаются в wedding_request_form_submit($form, &$form_state), посмотреть можно так:
print_r($form_state);
exit;
Если нет функции, то можно создать
Создал функцию, очистил кэш, засунул в функцию alert. Не выдался. Засунул аякс запрос чтобы вернул хотя бы текст "ОК". Не вернул. Даже намеренно ошибку сделал в функции, не отобразилось.
Для тех, кому будет интересно. Форма рабочая, однако необходимо в тему формы. Функция есть выше. Добавить три переменные
<?php $output .= drupal_render($form['form_build_id']);
$output .= drupal_render($form['form_id']);
$output .= drupal_render($form['form_token']);?>