Форма с ajax отправкой

Главные вкладки

Аватар пользователя siugaron siugaron 4 февраля 2015 в 13:46

Здравствуйте. Столкнулся с проблемой. В друпале я новичок. Взялся доделать один сайт на этой 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($commandsajax_command_settings($settings_dataFALSE));
    }
    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'));
}
?>

Код модуля с формой. Помогите пожалуйста разобраться. Второй день бьюсь с ней. Форма строится. Даже переменные формы куда-то отправляются. Но где и главное как их обработать, ума не приложу.
Мне бы вычислить куда передаются данные, дальше я сам попробую докавырять.

Комментарии

Аватар пользователя voviko voviko 4 февраля 2015 в 14:03

Данные передаются в wedding_request_form_submit($form, &$form_state), посмотреть можно так:
print_r($form_state);
exit;

Если нет функции, то можно создать

Аватар пользователя siugaron siugaron 4 февраля 2015 в 14:18

Создал функцию, очистил кэш, засунул в функцию alert. Не выдался. Засунул аякс запрос чтобы вернул хотя бы текст "ОК". Не вернул. Даже намеренно ошибку сделал в функции, не отобразилось.

Аватар пользователя siugaron siugaron 4 февраля 2015 в 16:33

Для тех, кому будет интересно. Форма рабочая, однако необходимо в тему формы. Функция есть выше. Добавить три переменные

<?php $output .= drupal_render($form['form_build_id']);
    
$output .= drupal_render($form['form_id']);
    
$output .= drupal_render($form['form_token']);?>