У меня есть форма, которая добавляется через nodeapi, отображается только в режиме просмотра. Пользователи могут выбрать элемент из меню выбора, и их выбор будет автоматически сохранен в базе данных с обратным вызовом hook_menu при изменении. Если у пользователя отключен javascript, он будет отправляться в обычном формате api. Все это работает нормально, но теперь из соображений безопасности я хочу отправить версию ajax через форму api. Мой form_name_submit прост как:
function mymodule_test_form_submit($form, &$form_state) {
global $user;
db_query("INSERT INTO {mymodule} (nid, uid, status, created) VALUES (%d, %d, %d, " . time() . ")", $form['#parameters'][2], $user->uid, $form_state['values']['mymodule_status']);
}
Мой Аякс:
$('.mysubmit').css('display', 'none');
$('.myclass').change(function() {
$.ajax({
type: 'POST',
url: Drupal.settings.basePath + 'mymodule/set/' + $nid + '/' + $('.myclass').val(),
dataType: 'json',
data: { 'ajax' : true, 'form_build_id' : $('#mymodule-form input[name=form_build_id]').val() }
});
});
И моя функция обратного вызова:
function mymodule_set($nid, $status) {
$form_build_id = $_POST['form_build_id'];
$form_state = array('storage' => NULL, 'submitted' => FALSE);
$form = form_get_cache($form_build_id, $form_state);
$args = $form['#parameters'];
$form_id = array_shift($args);
$form['#post'] = $_POST;
$form['#redirect'] = FALSE;
$form['#programmed'] = FALSE;
$form_state['post'] = $_POST;
drupal_process_form($form_id, $form, $form_state);
}
Первоначально моя функция обратного вызова была примерно такой же, как моя функция отправки, но теперь я пытаюсь использовать функцию отправки и с ajax. Это правильный способ использовать drupal_process_form? Форма извлекается из кеша, проверяется и отправляется, если нет ошибок? Я использую некоторый код из этого учебника, чтобы применить его к моей ситуации: http://drupal.org/node/331941 Кажется, нет никаких примеров того, что я пытаюсь сделать. У меня также есть $ form ['# cache'] = TRUE; в моей форме функции.
Как drupal_process_form сравнивает отправленные значения с исходной формой для проверки целостности? Я должен добавить свои значения в form_state, так как состояние формы будет пустым с ajax. Застрял на этом в течение нескольких дней, надеюсь, кто-то имеет опыт с этим.
Спасибо.