表单 – Drupal表单:希望在页面上将以前的表单值显示为default_value

前端之家收集整理的这篇文章主要介绍了表单 – Drupal表单:希望在页面上将以前的表单值显示为default_value前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的目标是,如果用户提交的此表单的“产品名称”值为“YYY”.在提交页面上应该重新加载,但这次“产品名称”应该显示以前的valye默认为本例“YYY”.

这是我的代码……

  1. function addnewproduct_page () {
  2. return drupal_get_form('addnewproduct_form',&$form_state);
  3. }
  4.  
  5. function addnewproduct_form(&$form_state) {
  6. $form = array();
  7.  
  8.  
  9. $formproductname['productname'] = array (
  10. '#type' => 'textfield','#title' => t('Product Name'),'#required' => TRUE,'#size' => '20',);
  11.  
  12. if (isset($form_state['values']['productname']))
  13. {
  14. $form['productname']['#default_value'] = $form_state['values']['productname'];
  15. }
  16.  
  17. //a "submit" button
  18. $form['submit'] = array (
  19. '#type' => 'submit','#value' => t('Add new Product'),);
  20. return $form;
  21. }

解决方法

您可以在提交处理程序中使用$form_state [‘storage’]来保存步骤之间的值.所以添加一个提交函数,如下所示:
  1. function addnewproduct_form_submit ($form,&$form_state) {
  2. // Store values
  3. $form_state['storage']['addnewproduct_productname'] = $form_state['values']['productname'];
  4. // Rebuild the form
  5. $form_state['rebuild'] = TRUE;
  6. }

然后您的表单构建器功能将变为:

  1. function addnewproduct_form(&$form_state) {
  2.  
  3. $form = array();
  4.  
  5. $form['productname'] = array (
  6. '#type' => 'textfield',);
  7.  
  8. if (isset($form_state['storage']['addnewproduct_productname'])) {
  9. $form['productname']['#default_value'] = $form_state['storage']['addnewproduct_productname'];
  10. }
  11.  
  12. return $form;
  13. }

请记住,只要填写$form_state [‘storage’],您的表单就会一直生成.因此,当准备好将值保存到数据库等时,您需要调整提交处理程序并取消设置($form_state [‘storage’]).

如果你的表单更像是一个过滤器,即.用于显示而不是存储信息,那么你可以逃脱

  1. function addnewproduct_form_submit ($form,&$form_state) {
  2. // Rebuild the form
  3. $form_state['rebuild'] = TRUE;
  4. }

当表单重建时,它将可以访问上一次迭代中的$form_state [‘values’].

猜你在找的HTML相关文章