微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我的目标是,如果用户提交的此表单的“产品名称”值为“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’].

原文地址:https://www.jb51.cc/html/232409.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐