[РЕШЕНО] Опять про это. Форма API. Потеря значений HIDDEN-полей при возврате формы.

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

Аватар пользователя starro-serge starro-serge 30 августа 2010 в 5:03

Этого не может быть!

В форме несколько HIDDEN-полей, значения которых вычисляются скриптом в зависимости от заданных юзером значений в полях ввода.
При получении формы в $form_state нахожу эти HIDDEN-поля нетронутыми. То есть со значениями, переданными в форму, а не вычисленные в форме скриптом.
При этом в Firefox в диалоге вижу, что поля вычислятся как надо.

Этого не может быть!Этого не может быть!Этого не может быть!

Попробовал трюкануть. Сделал эти поля просто текстовыми, засунул в невидимый DIV.
Результат тот же.
То есть видится это так, что Друпал восстанавливает значения полей, до которых не коснулась рука пользователя.

Этого не может быть!Этого не может быть!Этого не может быть!

Комментарии

Аватар пользователя natbampo natbampo 30 августа 2010 в 8:54

"starro-serge" wrote:
Этого не может быть!

Видимо все таки может. У себя со скрытыми полями проверил - также.
Доставайте его значение из:

<?php
$form
['#post']['my_hidden1']
?>

"starro-serge" wrote:
То есть видится это так, что Друпал восстанавливает значения полей, до которых не коснулась рука пользователя

не выдумывайте

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 30 августа 2010 в 8:58

Просто автор, подумайте сами:
вы делаете мега-магазин, ну и взбрело вам в голову, стоимость заказа хранить в HIDDEN-полях.
Я прихожу, накидываю в корзину товаров на мильёны рублей, правлю фаерабагом стоимость до 100р, получаю профит, радуюсь

Аватар пользователя graker graker 30 августа 2010 в 10:05

Не-не-не, автор стопудово что-то не так написал. Я часто пользуюсь скрытыми полями, которые изменяю в JS и сохраняю аяксом - все сабмитится как надо, с изменениями. В общем, код в студию.

Другое дело, что - да, пользоваться ими надо только когда иначе нельзя, и не забывать про валидацию. А стоимость можно хранить в '#type'='value'.

Аватар пользователя natbampo natbampo 30 августа 2010 в 11:20

В общем выяснил, чтобы нормально работало надо не использовать св-во #value эл-та hidden для передачи значения в форму, а использовать #default_value (о чем Вандюк нам забыл рассказать)

<?php
  $form
['main']['my_hidden1'] = array(
    
'#type' => 'hidden',
    
//'#value' => '678', // Если будет меняться (JS), то не используем
    
'#default_value' => '678'
  
);
?>
Аватар пользователя natbampo natbampo 30 августа 2010 в 12:06

"graker" wrote:
Дык надо ж с официальным Form API сверяться - там это написано :)

мне так их официальный сайт не нравится Sad . Итак с английским не fluent так еще сам сайт запутанный как клубок ниток. И поиск мало помогает.