[Решено]Не работает AHAH в hook_form (нет значения в $_POST)

Главные вкладки

Аватар пользователя Positiff Positiff 10 мая 2012 в 18:29

В хуке form создаю ahah переключатель (radios) на который навешиваю ahah

       
function mymodule_form($node, &$form_state) {
$form['category_select'] = array(
                '#type' => 'radios',
                '#required' =>TRUE,            
                '#options' => array('1'=>'option1','2'=>'option2'),
                '#ahah' => array(
                        'event' => 'click',
                        'path'=>'switch_category',
                        'wrapper' => 'category_test',
                        'method' => 'replace',
                ),
        );
}

В обработчике пытаюсь получить и вывести из $_POST значение этой переменной - оно пустое.
$_POST['category_select']

Тот же самый код, но в отдельной функции построителе работает.

Может

Комментарии

Аватар пользователя t1mm1 t1mm1 10 мая 2012 в 18:58

есть модуль example
посмотрите в нем как реализованны примера с ахах.

через пост принимать данные - это не правильно.

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

Если в кратце. при генерации формы и дальшейшей ее обработки срабатывает проверка на изменение формы.
в вашем случае анан ее и меняет. странно что у вас не вылезла ошибка рода "произошла обишка, обратитесь к администратору".
что бы этого избежать, вам нужно написать коллбек на фунцию обработки ахах + так называемую футнцию хелпера, которая будет перегенерировать кеш формы. тогда все будет гуд.
очень хорошо логика работы становится понятна после работы с выпадающими списками. (протрахавшись две недели с КЛАДРом в свое время, и не такое прохаваешь).
ну как то так..

Аватар пользователя Positiff Positiff 10 мая 2012 в 20:39

Коллбек функция обработки естественно есть:

function ahah_switch_category_js(){
        $form = ahah_example_callback_helper();
        drupal_set_message('<pre>$form: '.check_plain(print_r($form,1)).'</pre>');
        drupal_set_message('<pre>$_POST: '.check_plain(print_r($_POST,1)).'</pre>');
        $output=$_POST['category_select'];
        drupal_json(array('status'=>'TRUE','data'=>$output));          
        exit();
}

Из примера я взял функцию хелпера, которую вызываю в данном обработчике. Но значение поля category_select нет ни в $_POST ни во всем полученном массиве $form

Такое ощущение что хук моего модуля добавляет свои элементы формы неправильно (не добавляет в кэш что ли), так как во всем полученном массиве $_POST нет ни одного значения для добавленных в моем хуке элементов. То есть например значения добавленные модулем CCK есть, а моих нет.

Аватар пользователя Positiff Positiff 10 мая 2012 в 21:52

В итоге нашел похожую проблему
http://www.drupal.ru/node/71792

Оказалось что проблема возникает в сочетании с элементом filefield.
Проверил, убив из моей формы поле прикрепления файла - заработало.

Единственное пока не удалось разобраться (как и ТС из темы по ссылке) в чем же собственно проблема. Есть предположение что проблема в подгружаемом файле filefield.js, который дезаблит лишнее...