Как передать в обработчик состояние формы?

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

Аватар пользователя Mr. Mostom Mr. Mostom 9 августа 2011 в 16:02

Добрый день.
Есть модуль, содержащий форму someform() (Form API). В этой форме много разных полей, в том числе элементы типы fieldset со свойством "#collapsible => true".
Есть обработчик формы someform_submit().
Вопрос - как в обработчике "узнать", в каком состоянии была отправлена форма, в частности, какие из филдсетов были закрытые, а какие - открытые?

Смысл в том, чтобы дать пользователю возможность сохранить форму и потом заполнять её дальше, но если он какие-то филдсеты свернул - надо, чтобы они и остались свернутыми.

Комментарии

Аватар пользователя Mr. Mostom Mr. Mostom 9 августа 2011 в 17:25

Я знаю, что такое $form_state, но мне нигде не удалось найти данные о состоянии элемента формы.
$form_state['values'], например, не содержит необходимой мне информации.
Закрыт ли филдсет или открыт?
Если вы покажете - я буду вам очень благодарен.

Аватар пользователя Crea Crea 9 августа 2011 в 17:57

Состояние филдсетов не хранится в форме..только в браузере
Пишите в куки, и восстанавливайте с помощью JS

Аватар пользователя boneg boneg 9 августа 2011 в 18:14

Еще вариант - добавить скрытое поле с состоянием филдсета и на сворачивание\разворачивание филдсета добавить обработчик на js, изменяющий значение поля.

Аватар пользователя Mr. Mostom Mr. Mostom 10 августа 2011 в 11:16

"boneg" wrote:
Еще вариант - добавить скрытое поле с состоянием филдсета и на сворачивание\разворачивание филдсета добавить обработчик на js, изменяющий значение поля.

Была такая мысль... Возможно ли это сделать с помощью #states, или придется все-таки писать свой JS?

Аватар пользователя Sun-fire Sun-fire 10 августа 2011 в 12:11

Таки да. Не совсем правильно понял суть вопроса. В $form_state нужного нет. Скорее всего придется писать состояние формы в куки кастомным JS скриптом.

Аватар пользователя boneg boneg 10 августа 2011 в 16:57

"Mr. Mostom" wrote:
Была такая мысль... Возможно ли это сделать с помощью #states, или придется все-таки писать свой JS?

Допустим у нас форма, которая содержит филдсет ентот имеет id "my-test-form" и нам нужно в зависимости от положения филдсета изменить значение "yes" или "no" в поле с id "edit-hidden-fieldset". По умолчанию у нас филдсет свернут - то есть значение "no". Пишем одну маленькую функция на jQuery и куданить подключаем

$(document).ready(function(){
$('#my-test-form .collapsible').click(function(){
if ($(this).hasClass('collapsed')) { //филдсет был свернут
$('#edit-hidden-fieldset').val('yes');
} else { //филдсет был развернут
$('#edit-hidden-fieldset').val('no');
}
});
});

И всего делов))