Почему $ form_state ['values'] стирается в drupal_process_form ()? - PullRequest
3 голосов
/ 27 июня 2010

Я пытаюсь программно хранить узлы типа CCK, используя drupal_execute (). Пустые узлы создаются; ни одно из полей CCK не сохраняется. Очевидно, что первая строка в drupal_process_form () отвечает:

$form_state['values'] = array();

Итак, мой вопрос: почему стираются «значения», и что более важно, как я могу сохранить поля CCK, используя drupal_execute ()?

Я тоже попробовал save_node (), который работал хорошо; однако я бы предпочел первое, так как оно вызывает проверку.

1 Ответ

3 голосов
/ 27 июня 2010

Массив значений очищается в drupal_process_form(), потому что позже он будет заполнен глобальным значением $_POST. Если вы посмотрите на drupal_execute(), вы увидите, что он делает противоположное, то есть, заполняет глобальный $_POST из переданного в $form_state['values'].

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

Это означает, что ваш подход в основном правильный и должен работать - если это не так, то должно быть что-то не так. Я не могу догадаться, что это может быть, но вы могли бы проверить эту ветку для некоторых обсуждений вашего подхода, в частности, для темы CCK (это смешанная ветка, в которой также обсуждается подход node_save(), но связанная часть может соответствовать вашей конкретной ситуации).

...