Не могу понять новый AHAH в друпал 7

Аватар пользователя divined divined 17 сентября 2012 в 17:38

Подскажите уже весь мозг сломал.

Как сделать добавление элементов в форму с помощью AJAX.

Хочу обратить внимание не замену, как написано в примерах, а именно добавление новых, не определенных ранее элементов.
С заменой присутствующих элементов проблем нет.

А вот если добавить новый элемент на форму, то его значения не попадают в form_state.

В 6 друпале мы пересобирали форму заново и все ложилось как надо. В 7-ке хоть убей не вижу как пересобрать форму для ДОБАВЛЕНИЯ в нее новых полей.

Почему не замену, потому что этих элементов может быть 100+, а может быть 1. И заранее определит на форме 100 элементов как понимаете не вариант.

Комментарии

Аватар пользователя divined divined 18 сентября 2012 в 10:04

Где вы там видите пример или описание добавление элементов, а не их замену?

Аватар пользователя xxandeadxx xxandeadxx 18 сентября 2012 в 10:15

если бы прочитали текст по ссылке, то поняли бы, что разницы в реализации "замены" и "добавления" нет

Аватар пользователя divined divined 18 сентября 2012 в 10:34

Дык я вижу что разницы нет. Элементы нормально добавляются в форму, вот только при сабмите значения пустые у новых элементов.

Аватар пользователя divined divined 18 сентября 2012 в 10:45

Т.е. как я понял из примера - всю логику добавления нужно делать в самом form_alter, а не в callback функции.

Аватар пользователя divined divined 18 сентября 2012 в 10:52

В этом и есть разница. Замену элементов можно делать и в callback функции как было в 6-ке.
А вот добавление новых только в form_alter.

Аватар пользователя xxandeadxx xxandeadxx 18 сентября 2012 в 10:56

"divined" wrote:
Замену элементов можно делать и в callback функции как было в 6-ке.

нельзя

Аватар пользователя divined divined 18 сентября 2012 в 10:59

xxandeadxx wrote:
"divined" wrote:
Замену элементов можно делать и в callback функции как было в 6-ке.

нельзя

Странно, а почему у меня работает такой callback?

<?php
function rkreal_get_select($form, &$form_state) {
    
user_cookie_save($form_state['input']);
    
$tid $form_state['input']['rk_region'];
    
$cities  = array(=> 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'];
}
?>
Аватар пользователя divined divined 18 сентября 2012 в 10:57

И это противоречит модульности и интуитивности программирования.
Когда знаешь несколько языков программирования, то многое реализуешь по интуиции, а не по реальному знанию языка. И такая реализация ставит в тупик мою интуицию )))

Аватар пользователя divined divined 18 сентября 2012 в 11:07

И можно вопрос вдогонку, раз уже кусок кода выложил:

В чем разница $form_state['input'] и $form_state['values']?

$form_state['values'] время от времени передает в callback не те значения что заполнены в форме, в отличие от $form_state['input'], которая всегда содержит верные зачения.

Аватар пользователя xxandeadxx xxandeadxx 18 сентября 2012 в 11:24

"divined" wrote:
Странно, а почему у меня работает такой callback?

если что-то работает, то это не значит, что делать надо именно так. читайте маны, там всё разжевано