Здраствуйте! есть форма которая обрабатывается ajax-ом, нужно в эту форму ajax подзапросом добавить новую, обработать, и вернуть полученные результаты. Есть мнения по этому счету? Ответы тестируй ctools не приветствуются:)
Form_api - отлично справляется с подобными задачами.
Заворачиваете обработчик формы на себя же саму, а там уже рулите.
Не забываем на входе рушить предыдущую созданную этой функцией форму (как минимум $form_state = array();), и в зависимости от полученных данных формируете новую.
Даавненько не заходил.
С 7-ой пока такого не пробовал, но для 6-ой делал подобное.
Так что если интересно посмотреть как сие происходит 6-ке, мог бы попробовать отыскать и поправить.
Только опишите что в конце должно получится, каков нужен результат .
Комментарии
посмотрите Subform
http://api.drupal.ru/api/group/form_api/7
Form_api - отлично справляется с подобными задачами.
Заворачиваете обработчик формы на себя же саму, а там уже рулите.
Не забываем на входе рушить предыдущую созданную этой функцией форму (как минимум $form_state = array();), и в зависимости от полученных данных формируете новую.
не могли бы показать на примере!
<?php
// $Id$
/**
function test_module_menu() {*Implementation of hook_menu().
*/
$items = array();
$items['test_module_page'] = array(
'title' => t('test_module_page'),
'page callback' => 'test_module_module_page',
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
return $items;
}
* Page callback for test_module_module_page
*/
function test_module_module_page(){
$fc_form = drupal_get_form('fc_form');
return render($fc_form);
}
/**
* Form for page
*/
function fc_form($form, $form_state) {
$form['#prefix'] = '<div id="fc-form-ajax-wrapper">';
$form['#suffix'] = '</div>';
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'submit ajax',
'#ajax' => array(
'callback' => 'preview_form_ajax',
'wrapper' => 'fc-form-ajax-wrapper',
),
);
return $form;
}
function
_ajax_example_test_form_get_first_dropdown_options() {return drupal_map_assoc(array(t('first'), t('second'), t('third')));
}
function ajax_example_test_form_dependent_dropdown_callback($form, $form_state) {
return $form['ajax_form']['dropdown_second'];
}
function _ajax_example_test_form_get_second_dropdown_options($key = '') {
$options = array(
t('first') => drupal_map_assoc(array(t('first_first'), t('first_second'), t('first_third'))),
t('second') => drupal_map_assoc(array(t('second_first'), t('second_second'), t('second_third'))),
t('third') => drupal_map_assoc(array(t('third_first'), t('third_second'), t('third_third'))),
);
if (isset($options[$key])) {
return $options[$key];
}
else {
return array();
}
} /**
* Ajax callback for FC FORM
*/
function preview_form_ajax($form, &$form_state) {
$options_first = _ajax_example_test_form_get_first_dropdown_options();
$selected = isset($form_state['values']['ajax_form']['dropdown_first']) ? $form_state['values']['ajax_form']['dropdown_first'] : key($options_first);
$form['ajax_form'] = array(
'#type' => 'fieldset',
'#title' => t('This is some content delivered via AJAX'),
);
$form['ajax_form']['dropdown_first'] = array(
'#type' => 'select',
'#title' => 'Instrument Type',
'#options' => $options_first,
'#default_value' => $selected,
'#ajax' => array(
// 'event' => 'change',
'callback' => 'ajax_example_test_form_dependent_dropdown_callback',
'wrapper' => 'dropdown-second-replace',
),
);
'#type' => 'select',
'#title' => $options_first[$selected] . ' ' . t('Instruments'),
'#prefix' => '<div id="dropdown-second-replace">',
'#suffix' => '</div>',
'#options' => _ajax_example_test_form_get_second_dropdown_options($selected),
'#default_value' => isset($form_state['values']['ajax_form']['dropdown_second']) ? $form_state['values']['ajax_form']['dropdown_second'] : '',
);
return $form;
} ?>
В общем главное чтоб ajax_example_test_form_dependent_dropdown_callback сработала!
Даавненько не заходил.
С 7-ой пока такого не пробовал, но для 6-ой делал подобное.
Так что если интересно посмотреть как сие происходит 6-ке, мог бы попробовать отыскать и поправить.
Только опишите что в конце должно получится, каков нужен результат .