我的目标是,如果用户提交的此表单的“产品名称”值为“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 [‘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; }
然后您的表单构建器功能将变为:
function addnewproduct_form(&$form_state) { $form = array(); $form['productname'] = array ( '#type' => 'textfield',); if (isset($form_state['storage']['addnewproduct_productname'])) { $form['productname']['#default_value'] = $form_state['storage']['addnewproduct_productname']; } return $form; }
请记住,只要填写$form_state [‘storage’],您的表单就会一直生成.因此,当准备好将值保存到数据库等时,您需要调整提交处理程序并取消设置($form_state [‘storage’]).
如果你的表单更像是一个过滤器,即.用于显示而不是存储信息,那么你可以逃脱
function addnewproduct_form_submit ($form,&$form_state) { // Rebuild the form $form_state['rebuild'] = TRUE; }
当表单重建时,它将可以访问上一次迭代中的$form_state [‘values’].