Drupal Form:希望在页面上将以前的表单值显示为 default_value [英] Drupal Form:want to show previous form value as default_value on page

查看:28
本文介绍了Drupal Form:希望在页面上将以前的表单值显示为 default_value的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的目标是用户提交此表单时,产品名称"值为YYY".提交页面应重新加载,但这次产品名称"应显示先前的默认值,如本例中的YYY".

My Goal is if user is submitting this form with "Product Name" value as "YYY". On submit page should reload but this time "Product Name" should show previous valye as default as in this case "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'] 来存储步骤之间的值.所以添加一个提交函数,如下所示:

You can use $form_state['storage'] in your submit handler to hoard values between steps. So add a submit function like so:

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;    
}

那么你的表单构建器功能将变成:

Then your form builder function would become:

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['storage'] 被填满,您的表单就会一直生成.因此,当准备将值保存到数据库等时,您需要调整提交处理程序和 unset($form_state['storage']).

Just remember that your form will keep being generated as long as your $form_state['storage'] is stuffed. So you will need to adjust your submit handler and unset($form_state['storage']) when are ready to save values to the database etc.

如果您的表单更像是一个过滤器,即.用于显示而不是存储信息,那么您只需

If your form is more like a filter ie. used for displaying rather than storing info, then you can get away with just

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

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

When the form rebuilds it will have access to $form_state['values'] from the previous iteration.

这篇关于Drupal Form:希望在页面上将以前的表单值显示为 default_value的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆