Drupal не может этого сделать? «Не могу» не входит в мой словарный запас!
У меня была такая же проблема, но я не мог позволить ей победить меня. Вот как я с этим справился:
В форме обработки, после того, как я вставляю детали в базу данных (или в электронное письмо или что-то еще), я установил 2 сообщения о состоянии drupal, как это
function process_form($form){
$success = do_email($form);
if ($success){
drupal_set_message("Success");
drupal_set_message("Your form worked!");
}
}
И в генераторе форм я читаю и очищаю сообщения, очищаю форму и выводю сообщение о состоянии в виде разметки:
function form_generator($form_state,$parameters){
$form = array();
...// This is where I make the regular form
$messages = drupal_get_messages(); // this gets the messages and clears them
if (isset($messages["status"])){
if (isset($messages['status'][0]) && isset($messages['status'][1])){
if ($messages['status'][0]=="Success"){
$form = array(); // This clears the form I've just made
$form['final_message']= array(
'#type' => 'markup',
'#markup' => $messages['status'][1],
);
}
}
}
}
Это не очищает форму при первом показе, потому что $ messages не установлен, и когда вы сталкиваетесь с ошибками проверки, они все равно будут появляться.
Волшебство Drupal препятствует нашему пути, но воля PHP-кодера сильнее.