Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
exit() в друпале нужно использовать drupal_exit()'access callback' => TRUE, — зло. Объявите свой permission или используйте стандартный access content#ajax из Forms API, тогда отработают стандартный валидатор и сабмит формы, она ребилднется и вернет нужную информацию.> 'access callback' => TRUE, — зло.
это всего лишь пример.
Для моего случая когда формы изначально нет на странице, это почему то не срабатывает. Функция определенная в #ajax не вызывается. Если знаете в чем проблема — буду рад узнать.
function test_menu() {
$items = array();
$items['test'] = array(
'type' => MENU_SUGGESTED_ITEM,
'title' => t('Test page'),
'page callback' => 'test_page',
'access arguments' => array('access content'),
);
$items['callback'] = array(
'type' => MENU_CALLBACK,
'page callback' => 'test_callback',
'access arguments' => array('access content'),
);
return $items;
}
function test_page() {
drupal_add_js('misc/jquery.form.js');
drupal_add_js(drupal_get_path('module', 'test') . '/test.js');
$output = '<div id="form"></div>';
return $output . l(t('Get form'), 'callback', array('attributes' => array('id' => 'test-link')));
}
function test_callback() {
print drupal_render(drupal_get_form('test_form'));
drupal_exit();
}
function test_form($form, $form_state) {
$form = array();
$form['aass'] = array(
'#theme' => 'status_messages'
);
$form['messages'] = array(
'#markup' => '',
);
$form['name'] = array(
'#title' => t('Name'),
'#type' => 'textfield',
'#default_value' => '',
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
return $form;
}
function test_form_validate(&$form, &$form_state) {}
function test_form_submit($form, &$form_state) {
$form_state['rebuild'] = TRUE;
drupal_set_message(t('Ok. All good!'));
}
(function($) {
$(document).ready(function() {
var success = function() {
$('#test-form').ajaxForm({
target: '#form',
success: success
});
};
$('#test-link').click(function(event) {
$.get(Drupal.settings.basePath + 'callback', function(data) {
$('#form').html(data);
Drupal.attachBehaviors('#test-form');
success();
});
event.preventDefault();
});
});
})(jQuery);
Загрузка и отправка формы по AJAX на Drupal 7