Подскажите уже весь мозг сломал.
Как сделать добавление элементов в форму с помощью AJAX.
Хочу обратить внимание не замену, как написано в примерах, а именно добавление новых, не определенных ранее элементов.
С заменой присутствующих элементов проблем нет.
А вот если добавить новый элемент на форму, то его значения не попадают в form_state.
В 6 друпале мы пересобирали форму заново и все ложилось как надо. В 7-ке хоть убей не вижу как пересобрать форму для ДОБАВЛЕНИЯ в нее новых полей.
Почему не замену, потому что этих элементов может быть 100+, а может быть 1. И заранее определит на форме 100 элементов как понимаете не вариант.
Комментарии
http://drupal.org/node/752056
Где вы там видите пример или описание добавление элементов, а не их замену?
если бы прочитали текст по ссылке, то поняли бы, что разницы в реализации "замены" и "добавления" нет
examples
Дык я вижу что разницы нет. Элементы нормально добавляются в форму, вот только при сабмите значения пустые у новых элементов.
Т.е. как я понял из примера - всю логику добавления нужно делать в самом form_alter, а не в callback функции.
Хммм, получилось.
Но зачем такой изврат?
Теперь form_alter на 3 страницы.
В этом и есть разница. Замену элементов можно делать и в callback функции как было в 6-ке.
А вот добавление новых только в form_alter.
нельзя
Странно, а почему у меня работает такой callback?
<?php
function rkreal_get_select($form, &$form_state) {
user_cookie_save($form_state['input']);
$tid = $form_state['input']['rk_region'];
$cities = array(0 => t('All'));
$default = 0;
if ($tid != 0) {
$childrens = taxonomy_get_tree(2, $tid);
$childrens = i18n_taxonomy_localize_terms($childrens);
foreach ($childrens as $children) {
($children->depth == 1) ? $cities[$children->tid] = '--- '.$children->name : $cities[$children->tid] = $children->name;
($default == 0) ? $default = $children->tid : null;
}
}
$form['rk_city']['#options'] = $cities;
$form['rk_city']['#default_value'] = $default;
return $form['rk_city'];
}
?>
И это противоречит модульности и интуитивности программирования.
Когда знаешь несколько языков программирования, то многое реализуешь по интуиции, а не по реальному знанию языка. И такая реализация ставит в тупик мою интуицию )))
В любом случае благодарю за помощь.
И можно вопрос вдогонку, раз уже кусок кода выложил:
В чем разница $form_state['input'] и $form_state['values']?
$form_state['values'] время от времени передает в callback не те значения что заполнены в форме, в отличие от $form_state['input'], которая всегда содержит верные зачения.
если что-то работает, то это не значит, что делать надо именно так. читайте маны, там всё разжевано