drupal #default_value не применяется в опции выбора в drupal_render

Я пытаюсь напечатать элемент «выбрать вариант» 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, но он тоже не работает и не принимает #default_value в drupal_render

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

Я полагаю, это связано с использованием drupal_render. У кого-нибудь есть решение?


person Yuseferi    schedule 19.07.2012    source источник
comment
Одна вещь, о которой люди должны знать при работе с этим, заключается в том, что атрибут автозаполнения должен быть отключен, иначе Firefox не будет отображать выбранный параметр как выбранный.   -  person Thony    schedule 18.03.2015


Ответы (4)


В Drupal_render, используемом в drupal_get_form, #default_value not set use должен использовать #value вместо него.

$f['type'] = array(
'#type' => 'select',
'#options' => drupal_map_assoc(array('1','2','3','4')),
'#value'=> '1',
);
person Yuseferi    schedule 20.07.2012
comment
Это опасно, так как пользователь не сможет переопределить отправленное значение (Описание: используется для установки значений, которые пользователь не может редактировать. НЕ следует путать с #default_value, который предназначен для ввода формы, где пользователи могут переопределить значение по умолчанию. ) api.drupal.org/api/drupal/< /а> - person BenMQ; 14.06.2013
comment
Большое спасибо, этот ответ правильный и решил мое застревание - person Trung Le Nguyen Nhat; 29.09.2016
comment
@TrungLeNguyenNhat всегда пожалуйста, я рад видеть, что мой ответ может помочь другим парням через несколько лет :) - person Yuseferi; 29.09.2016

Следующий код не работает:

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

И значения по умолчанию теперь работают.

person Iaroslav    schedule 12.10.2012

У меня такая же проблема. наконец, я нашел один метод. Как вы сказали, default_value не работает. Поэтому зафиксируйте значение default_value равным 0 и измените массив параметров, поместив значение по умолчанию вверху.

person user1611237    schedule 22.01.2014

Если вы посмотрите на пример из API форм Drupal вы увидите, что параметр #options принимает массив пар ключ-значение, а в #default_value вы должны указать ключ значения по умолчанию, а не строковое значение.

Кроме того, согласно документации для параметра #options , #options ожидает строковых значений. Итак, ваш выбор должен быть больше похож на:

$f['type'] = array(
   '#type' => 'select',
   '#options' => drupal_map_assoc(array('1','2','3','4')),
   '#default_value'=> '1',
);
person nmc    schedule 19.07.2012
comment
.Это не работает с drupal_render. В моем исходном коде я устанавливаю ключи массива. проблема в том, что 'drupal_render' использует в drupal_get_form не установленное значение #default_value. - person Yuseferi; 20.07.2012