【问题标题】:drupal #default_value not applied in select option in drupal_renderdrupal #default_value 未应用于 drupal_render 中的选择选项
【发布时间】:2012-07-19 05:22:37
【问题描述】:

我尝试在表单中打印一个drupal“选择选项”元素。我认为drupal_render没有应用#default_value。除了#default_value没有应用之外,一切都很好。
问题出在哪里?有人知道我该怎么做吗? #default_value 接受 string 值吗?

这是我的代码的伪代码:

function test_menu(){
$items=array();

    $items['admin/config/regional/test']=array(
    'title' => 'test',
    'description' => t('test'),
    'page callback' =>'drupal_get_form',
    'page arguments' => array('test_function'),

);
$items[]=array();
return $items;
}


function test_function(){
 $header = array
  (
  'test1' => t('test1'),
  'test2'=> t('test2'),
  );
 $a=(1,2,3);
 $$options=array();
 foreach($a as $i=>$v)
  {
    $f['type'] = array(
   '#type' => 'select',
   '#options' => array(1,2,3,4),
   '#default_value'=>1,
    );
$options += array($name=>array( 'test1' => $v,
   'test2'=> drupal_render($f['type']) ,
  }
   $form['table'] = array
   (
   '#type' => 'tableselect',
   '#header' => $header,
   '#options' => $options,
   '#multiple' => FALSE
   //'#empty' => t('No users found'),
   );
   $form['submit'] = array
       (
   '#type' => 'submit',
   '#value' => t('Submit'),
    );
   return $form;
 }    

我测试了textfield,但它也不起作用,并且在 drupal_render 中不接受#default_value

    $f['test3']=array(
    '#type'=>'textfield',
    '#title'=>'test3',
    '#default_value' =>'aaa',
);

我想这是因为使用了 drupal_render 。有人有解决方案吗?

【问题讨论】:

  • 人们在使用它时应该注意的一件事是自动完成属性应该设置为“关闭”,否则 Firefox 不会将所选选项显示为选中。

标签: drupal-7 render default-value drupal-forms drupal-render


【解决方案1】:

在 Drupal_render 中使用 drupal_get_form 时,#default_value not set use 必须使用 #value instaed。

$f['type'] = array(
'#type' => 'select',
'#options' => drupal_map_assoc(array('1','2','3','4')),
'#value'=> '1',
);

【讨论】:

  • 这是危险的,因为用户将无法覆盖提交的值(描述:用于设置用户无法编辑的值。不应与用于表单输入的 #default_value 混淆用户可以覆盖默认值。)api.drupal.org/api/drupal/…
  • 非常感谢,这个答案是正确的,解决了我的卡住
  • @TrungLeNguyenNhat 不客气,我很高兴看到我的回答可以在几年后帮助其他人:)
【解决方案2】:

以下代码不起作用:

$form['title'] = array(
'#type' => 'select',
'#options' => drupal_map_assoc(array(t('opt1'), t('opt3'), t('opt4'), t('opt5'), t('opt6'))),
'#default_value' => array($default_value_key));


$form['title1'] = array(
'#type' => 'select',
'#options' => drupal_map_assoc(array(t('opt1'), t('opt3'), t('opt4'), t('opt5'), t('opt6'))),
'#default_value' => array($default_value_key));

return $form;

但后来我做了以下事情:

$form['group'] = array('#tree' => TRUE);

$form['group']['title'] = array(
'#type' => 'select',
'#options' => drupal_map_assoc(array(t('opt1'), t('opt3'), t('opt4'), t('opt5'), t('opt6'))),
'#default_value' => array($default_value_key));


$form['group']['title1'] = array(
'#type' => 'select',
'#options' => drupal_map_assoc(array(t('opt1'), t('opt3'), t('opt4'), t('opt5'), t('opt6'))),
'#default_value' => array($default_value_key));

return $form;

默认值现在可以使用了。

【讨论】:

    【解决方案3】:

    我也有同样的问题。最后,我找到了一种方法。正如你所说, default_value 不起作用。所以把 default_value 固定为 0。然后改变 options 数组,把默认值放在最上面。

    【讨论】:

      【解决方案4】:

      如果您查看Drupal's Form API 中的示例,您会看到#options 设置采用键值对数组,并且在#default_value 中,您应该指定默认值,而不是字符串值。

      另外,根据documentation for the #options setting#options 期待字符串值。所以你的选择应该更像:

      $f['type'] = array(
         '#type' => 'select',
         '#options' => drupal_map_assoc(array('1','2','3','4')),
         '#default_value'=> '1',
      );
      

      【讨论】:

      • 。它不适用于 drupal_render。在我的原始代码中,我设置了数组键。问题是在 drupal_get_form 中使用的“drupal_render”未设置#default_value。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多