Drupal的形式:要显示一个表单值页面上DEFAULT_VALUE(Drupal Form:wan

2019-06-24 20:44发布

我的目标是,如果用户提交该表格“产品名称”值“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;
}

Answer 1:

您可以使用$ form_state [“存储”]在您提交处理程序步骤之间囤积值。 因此,添加像这样一个提交功能:

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',
'#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 [“存储”]塞满。 所以,你需要调整你的提交处理程序和取消($ form_state [“存储”])是准备值保存到数据库等等。当

如果您的形式更像是一个过滤器,即。 用于显示而不是存储信息,那么你就可以逃脱只是

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

当窗体重建将有机会获得$ form_state从以前的迭代[“值”]。



Answer 2:

Drupal将在默认情况下,如果你有这样做:

$formproductname['#redirect'] = FALSE;

在你的$ formproductname阵列。



Answer 3:

我宁愿保存一个,当我们谈论复杂的形式时的所有值:

foreach ($form_state['values'] as $form_state_key => $form_state_value) {
    $form_state['storage'][$form_state_key] = $form_state['values'][$form_state_value];
}


Answer 4:

简单地增加重建= true,将做的工作:

  $form_state['rebuild'] = TRUE;

版本:Drupal的7



Answer 5:

为寻找答案,而这里使用的网页表单(这我只是在努力通过),这是我落得这样做:

//in hook_form_alter
$form['#submit'][] = custom_booking_form_submit;

function custom_booking_form_submit($form, &$form_state) {
//  drupal_set_message("in form submit");
//  dpm($form_state, 'form_state');

    foreach ($form_state['values']['submitted_tree'] as $form_state_key => $form_state_value) {

        $form_state['storage'][$form_state_key] = $form_state_value;
    }
}

注意:添加了“,因为它是丢失



Answer 6:

在我来说,我有一对夫妇的下拉菜单中。 提交回发到同一页上,在那里我可以过滤视图,我想表明先前选定的期权形式。 在提交表单我建在提交钩查询字符串:

function myform_submit($form, &$form_state) {

  $CourseCat = $form_state['values']['coursecat']; 

  drupal_goto("courses" , array('query' => 
    array('cat'=>$CourseCat))
  );
}

在形式构建钩,我所做的只是获取当前的查询字符串,并使用这些默认值,就像这样:

function myform_form($form, &$form_state) {
  $Params = drupal_get_query_parameters ();
  $CatTree = taxonomy_get_tree(taxonomy_vocabulary_machine_name_load ('category')->vid);

  $Options = array ();
  $Options ['all'] = 'Select Category';
  foreach ($CatTree as $term) {
        $Options [$term->tid] = $term->name;
  } 
  $form['cat'] = array(
    '#type' => 'select',
    '#default_value' => $Params['cat'],      
    '#options' => $Options
  );

  $form['submit'] = array(
    '#type' => 'submit',
    '#default_value' => 'all',
    '#value' => t('Filter'),
  );

  return $form;
}


Answer 7:

我通常把提交的值在$ _SESSION变量在提交钩解决这个问题。 然后加载窗体下一次,我检查相应的键$ _SESSION变量,并把值放入#default_value插槽如果有什么存在。



Answer 8:

不知道这是否会为你工作,但你可以尝试添加#default_value键的形式排列

$form['productname'] = array (
'#type' => 'textfield',
'#title' => t('Product Name'),
'#required' => TRUE,
'#size' => '20',
'#default_value' => variable_get('productname', ''),
);

这样,如果该变量设置会抢不管它是什么,但如果没有,你可以使用默认值。



文章来源: Drupal Form:want to show previous form value as default_value on page
标签: forms drupal