我的目标是,如果用户提交此表单,其"产品名称"值为"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;
}
Run Code Online (Sandbox Code Playgroud)
hit*_*ory 15
您可以在提交处理程序中使用$ form_state ['storage']来保存步骤之间的值.所以添加一个提交函数,如下所示:
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;
}
Run Code Online (Sandbox Code Playgroud)
然后您的表单构建器功能将变为:
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;
}
Run Code Online (Sandbox Code Playgroud)
请记住,只要填写$ form_state ['storage'],您的表单就会一直生成.因此,当准备好将值保存到数据库等时,您需要调整提交处理程序并取消设置($ form_state ['storage']).
如果你的表单更像是一个过滤器,即.用于显示而不是存储信息,那么你可以逃脱
function addnewproduct_form_submit ($form, &$form_state) {
// Rebuild the form
$form_state['rebuild'] = TRUE;
}
Run Code Online (Sandbox Code Playgroud)
当表单重建时,它将可以访问上一次迭代中的$ form_state ['values'].
Dav*_*ong -1
我通常通过将提交的值放入提交钩子的 $_SESSION 变量中来解决这个问题。然后,下次加载表单时,我检查 $_SESSION 变量中是否有适当的键,如果存在任何内容,则将该值放入 #default_value 槽中。