Я пытаюсь добавить в форму ряд элементов формы, используя AHAH. Моя форма отображается в таблице, и поэтому мне нужно добавить элементы формы в виде строки.
Я использую следующий код для своей кнопки «Добавить еще»:
$form['addmore'] = array(
'#type' => 'button',
'#value' => t('Add More'),
'#ahah' => array(
'path' => 'mymodule/add-more',
'wrapper' => 'mytable-tbody', // mytable-tbody is the id of my form table tbody
'method' => 'append',
'effect' => 'fade',
),
);
Затем я определяю путь меню для заданного пути, функция обратного вызова которого делает следующее:
$form_state = array('storage' => NULL, 'submitted' => FALSE);
$form_build_id = $_POST['form_build_id'];
$form = form_get_cache($form_build_id, $form_state);
$args = $form['#parameters'];
$form_id = array_shift($args);
$form_state['post'] = $form['#post'] = $_POST;
$form['#programmed'] = $form['#redirect'] = FALSE;
$form['customer-6-first_name'] = array(
'#type' => 'textfield',
'#title' => '',
'#size' => '15',
'#maxlength' => 128,
);
... ... (more such form elements)
$cells = array();
$cells[] = drupal_render($form['customer-6-first_name']);
... ... (more such form renders within the cells array)
$output = '<tr>';
foreach ($cells as $cell) {
$output .= _theme_table_cell($cell);
}
$output .= " </tr>\n";
drupal_process_form($form_id, $form, $form_state);
$form = drupal_rebuild_form($form_id, $form_state, $args, $form_build_id);
drupal_json($output);
При нажатии «Добавить еще» я получаю новую строку, и элементы формы также отображаются, однако они не получают идентификатор и имя и, следовательно, бесполезны.
Я использую метод "append", поэтому мне нужно написать код только для одной строки. Я уверен, что делаю что-то не так, но не смог понять это за последние 4-6 часов.