Создал модуль, который определяет новый тип материала. В новом типе есть возможность добавления дополнительных полей. Добавлена кнопка со своим обработчиком. В обработчике прописано следующее
<?php
$form_state['storage']['add_field'] = TRUE;
$form_state['rebuild'] = TRUE;
?>
По нажатии кнопки добавления поля происходит перезагрузка формы, проверяется значение
<?php
$form_state['storage']['add_field']
?>
и добавляется новое поле.
И вот в чем проблема! При сохранении формы (sibmit), форма сохраняется и опять добавляется поле. Где сбросить
<?php
$form_state['storage']['add_field']
?>
Добавил валидатор формы
<?php
function my_module_validate($node, &$form) {
unset(???);
}
?>
а он же не принимает $form_state. Что необходимо сбросит в валидаторе, чтоб не добавлялось новое поле!?
Смотрел $node и $form, там много мест с [add_field].
Комментарии
На этом месте мой мозг отключился, извините
«Создал новый модуль, который определяет новый тип материала. В новом типе есть возможность добавлять новый тип материала.»
Спасибо, поправил!
Может нужно $form_state['rebuild'] вернуть обратно в FALSE?
+ к этому попробуйте дописать следующее:
$form_state = array('storage' => NULL, 'submitted' => FALSE);
Сабмит формы не происходит, если в $form_state['storage'] что-то есть.
Валидатор формы не принимает $form_state!!!
Вот кусок кода
<?php
function my_module_validate($node, &$form)
?>
Функция валидации для этого и не нужна.
Поместите этот код в обработчик вашей кнопки
Я в качестве конструктора формы использую хук hook_form, там кнопки отправки формы создаются автоматически, так что свой обработчик не создать.
А валидатор формы идет хук hool_validate($node, &$form), который вовсе не принимает $form_state.
или я чего-то не понимаю, или одно из двух...
{
....
$form['button_submit']=array('#type'=>'submit', '#value'=>t('Save all')); //собственно кнопка сабмит
$form['validate'][]='my_form_custom_validator'; //функция - валидатор
$form['submit'][]='my_form_custom_submitter'; // функция - сабмит формы
return $form;
}
function my_form_custom_validator($form, &$form_state)
{
print_r($form_state);
die();
}
function my_form_custom_submitter($form, &$form_state)
{
print_r($form_state);
die();
}
Только сегодня писал нечто подобное, все работало.
Спасибо, помогло!
Итак, решение:
добавляем валидатор формы и там убиваем $form_state['storage']
<?php
$form['#validate'] = array('my_module_validator');
function
my_module_validator($form, &$form_state) {unset($form_state['storage']);
}
?>
И вопросик напоследок! Можно ли в данном случае как то использовать хук hook_validate($node, &$form) ???
вопрос - зачем? переменная $node должна быть доступна и из своего валидатора.