我的目标是,如果用户提交该表格“产品名称”值“YYY”。 在提交页面重新载入,但这次“产品名称”应显示以前的valye为默认值在这种情况下,“YYY”。
这里是我的代码...
function addnewproduct_page () {
return drupal_get_form('addnewproduct_form',&$form_state);
}
function addnewproduct_form(&$form_state) {
$form = array();
$formproductname['productname'] = array (
'#type' => 'textfield',
'#title' => t('Product Name'),
'#required' => TRUE,
'#size' => '20',
);
if (isset($form_state['values']['productname']))
{
$form['productname']['#default_value'] = $form_state['values']['productname'];
}
//a "submit" button
$form['submit'] = array (
'#type' => 'submit',
'#value' => t('Add new Product'),
);
return $form;
}
您可以使用$ form_state [“存储”]在您提交处理程序步骤之间囤积值。 因此,添加像这样一个提交功能:
function addnewproduct_form_submit ($form, &$form_state) {
// Store values
$form_state['storage']['addnewproduct_productname'] = $form_state['values']['productname'];
// Rebuild the form
$form_state['rebuild'] = TRUE;
}
然后你的表单设计器功能将成为:
function addnewproduct_form(&$form_state) {
$form = array();
$form['productname'] = array (
'#type' => 'textfield',
'#title' => t('Product Name'),
'#required' => TRUE,
'#size' => '20',
);
if (isset($form_state['storage']['addnewproduct_productname'])) {
$form['productname']['#default_value'] = $form_state['storage']['addnewproduct_productname'];
}
return $form;
}
只要记住,正在生成您的形式将继续只要你$ form_state [“存储”]塞满。 所以,你需要调整你的提交处理程序和取消($ form_state [“存储”])是准备值保存到数据库等等。当
如果您的形式更像是一个过滤器,即。 用于显示而不是存储信息,那么你就可以逃脱只是
function addnewproduct_form_submit ($form, &$form_state) {
// Rebuild the form
$form_state['rebuild'] = TRUE;
}
当窗体重建将有机会获得$ form_state从以前的迭代[“值”]。
Drupal将在默认情况下,如果你有这样做:
$formproductname['#redirect'] = FALSE;
在你的$ formproductname阵列。
我宁愿保存一个,当我们谈论复杂的形式时的所有值:
foreach ($form_state['values'] as $form_state_key => $form_state_value) {
$form_state['storage'][$form_state_key] = $form_state['values'][$form_state_value];
}
简单地增加重建= true,将做的工作:
$form_state['rebuild'] = TRUE;
版本:Drupal的7
为寻找答案,而这里使用的网页表单(这我只是在努力通过),这是我落得这样做:
//in hook_form_alter
$form['#submit'][] = custom_booking_form_submit;
function custom_booking_form_submit($form, &$form_state) {
// drupal_set_message("in form submit");
// dpm($form_state, 'form_state');
foreach ($form_state['values']['submitted_tree'] as $form_state_key => $form_state_value) {
$form_state['storage'][$form_state_key] = $form_state_value;
}
}
注意:添加了“,因为它是丢失
在我来说,我有一对夫妇的下拉菜单中。 提交回发到同一页上,在那里我可以过滤视图,我想表明先前选定的期权形式。 在提交表单我建在提交钩查询字符串:
function myform_submit($form, &$form_state) {
$CourseCat = $form_state['values']['coursecat'];
drupal_goto("courses" , array('query' =>
array('cat'=>$CourseCat))
);
}
在形式构建钩,我所做的只是获取当前的查询字符串,并使用这些默认值,就像这样:
function myform_form($form, &$form_state) {
$Params = drupal_get_query_parameters ();
$CatTree = taxonomy_get_tree(taxonomy_vocabulary_machine_name_load ('category')->vid);
$Options = array ();
$Options ['all'] = 'Select Category';
foreach ($CatTree as $term) {
$Options [$term->tid] = $term->name;
}
$form['cat'] = array(
'#type' => 'select',
'#default_value' => $Params['cat'],
'#options' => $Options
);
$form['submit'] = array(
'#type' => 'submit',
'#default_value' => 'all',
'#value' => t('Filter'),
);
return $form;
}
我通常把提交的值在$ _SESSION变量在提交钩解决这个问题。 然后加载窗体下一次,我检查相应的键$ _SESSION变量,并把值放入#default_value插槽如果有什么存在。
不知道这是否会为你工作,但你可以尝试添加#default_value
键的形式排列
$form['productname'] = array (
'#type' => 'textfield',
'#title' => t('Product Name'),
'#required' => TRUE,
'#size' => '20',
'#default_value' => variable_get('productname', ''),
);
这样,如果该变量设置会抢不管它是什么,但如果没有,你可以使用默认值。