Добрый день.
Есть модуль, содержащий форму someform() (Form API). В этой форме много разных полей, в том числе элементы типы fieldset со свойством "#collapsible => true".
Есть обработчик формы someform_submit().
Вопрос - как в обработчике "узнать", в каком состоянии была отправлена форма, в частности, какие из филдсетов были закрытые, а какие - открытые?
Смысл в том, чтобы дать пользователю возможность сохранить форму и потом заполнять её дальше, но если он какие-то филдсеты свернул - надо, чтобы они и остались свернутыми.
Комментарии
Переменная $form_state существует как раз для этого. Читайте Form API.
Я знаю, что такое $form_state, но мне нигде не удалось найти данные о состоянии элемента формы.
$form_state['values'], например, не содержит необходимой мне информации.
Закрыт ли филдсет или открыт?
Если вы покажете - я буду вам очень благодарен.
Состояние филдсетов не хранится в форме..только в браузере
Пишите в куки, и восстанавливайте с помощью JS
Еще вариант - добавить скрытое поле с состоянием филдсета и на сворачивание\разворачивание филдсета добавить обработчик на js, изменяющий значение поля.
Была такая мысль... Возможно ли это сделать с помощью #states, или придется все-таки писать свой JS?
Таки да. Не совсем правильно понял суть вопроса. В $form_state нужного нет. Скорее всего придется писать состояние формы в куки кастомным JS скриптом.
Допустим у нас форма, которая содержит филдсет ентот имеет id "my-test-form" и нам нужно в зависимости от положения филдсета изменить значение "yes" или "no" в поле с id "edit-hidden-fieldset". По умолчанию у нас филдсет свернут - то есть значение "no". Пишем одну маленькую функция на jQuery и куданить подключаем
$('#my-test-form .collapsible').click(function(){
if ($(this).hasClass('collapsed')) { //филдсет был свернут
$('#edit-hidden-fieldset').val('yes');
} else { //филдсет был развернут
$('#edit-hidden-fieldset').val('no');
}
});
});
И всего делов))