Drupal7: отправка данных в многошаговой форме из интерфейса в другой
Я работаю с друпальными формами. Я создал многошаговую форму, которая позволяет пользователю перемещаться между 3 страницами или 3 интерфейсами. После того, как пользователь заполнил необходимые формы на странице 2, функция submit должна собрать эту информацию в массив и передать этот массив на следующую страницу, которая будет использоваться на этой странице. Я ищу правильный способ передачи данных страницы 2 на следующая страница из функции отправки
function my_module_form_submit($form, &$form_state) {
$data = array(); //array of data that takes data from the current page forms
switch ($form_state['stage']) { // stage have 3 values(3 id) corresponding to three interfaces of forms
case 'page1':
// some simples instructions
break;
case 'page2':
//collect data from page2 forms
$database_name =$form_state['values']['databasename'];
$user_name =$form_state['values']['username'];
$user_pass =$form_state['values']['userpass'];
$host =$form_state['values']['host'];
$port =$form_state['values']['port'];
$database_driver =$form_state['values']['databasedriver'];
$db_array = array(); // put the data in an array
$db_array['database'] = $database_name;
$db_array['username'] = $user_name;
$db_array['password'] = $user_pass;
$db_array['host'] = $host; //localhost
$db_array['port'] = $port; //localhost
$db_array['driver'] = $database_driver; //mysql
// some query after being connected to the database that return an array containing
// existing data tables names in the current database(works fine) data tables names are stored in the array $data
$form_state['multistep_values'][$form_state['stage']] = $form_state['values'];
$form_state['new_stage'] = my_module_move_to_next_stage($form,$form_state);
// function that changes the id of current the page to go to the next page: forms
break;
case 'page3':
// some instructions
break;
$form_state['multistep_values']['form_build_id'] = $form_state['values']['form_build_id'];
$form_state['stage'] = $form_state['new_stage']; //change the id of the current page and rebuilt the form with the next page forms
$form_state['rebuild'] = TRUE;
}
Это моя функция, все работает нормально, но я хочу просто передать массив данных в следующую форму, что было бы лучшим решением для этого.
1 ответ
Я сам нашел решение:D, чтобы хранить данные из интерфейса и использовать их в другом интерфейсе, мы можем сделать это: в функции submitt мы должны перестроить форму, чтобы перейти к новому интерфейсу, а затем сохранить данные в новой форме.
// submitt the first form
$form_state['rebuild'] = TRUE; // rebuilt to go to the next form
$form_state['storage']['myvalue'] =$data; // store the required data
В следующей форме, где мы хотим использовать представленные данные, мы делаем следующее.
function MY_MODULE_form($form, &$form_state) { // the next form
if (!empty($form_state['storage']['myvalue'])) { // call and use the submitted data
$values=$form_state['storage']['myvalue'];
//use the submitted data of the previous form in the new form
}
$form['new form'] = array(
'#type' => 'radios',
'#options' =>$values,
);
return $form;
}