Проблема с обработкой форм

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

Аватар пользователя vic vic 1 октября 2009 в 7:25

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

<?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].

Комментарии

Аватар пользователя Stutzer Stutzer 1 октября 2009 в 7:33

На этом месте мой мозг отключился, извините
«Создал новый модуль, который определяет новый тип материала. В новом типе есть возможность добавлять новый тип материала.»

Аватар пользователя Stutzer Stutzer 1 октября 2009 в 7:53

Может нужно $form_state['rebuild'] вернуть обратно в FALSE?
+ к этому попробуйте дописать следующее:
$form_state = array('storage' => NULL, 'submitted' => FALSE);

Сабмит формы не происходит, если в $form_state['storage'] что-то есть.

Аватар пользователя vic vic 1 октября 2009 в 10:09

Я в качестве конструктора формы использую хук hook_form, там кнопки отправки формы создаются автоматически, так что свой обработчик не создать.
А валидатор формы идет хук hool_validate($node, &$form), который вовсе не принимает $form_state.

Аватар пользователя iVor iVor 1 октября 2009 в 22:28

или я чего-то не понимаю, или одно из двух...

function my_custom_forma($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();
}

Только сегодня писал нечто подобное, все работало.

Аватар пользователя vic vic 2 октября 2009 в 9:27

"iVor" wrote:

Спасибо, помогло!
Итак, решение:
добавляем валидатор формы и там убиваем $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) ???