Как создать виджет для поля формы с optgroup?

Главные вкладки

Аватар пользователя pingvin156 pingvin156 27 июня 2019 в 20:47

При формировании select в виджете в функции formElement формируется массив значений:

<?php
foreach ($result as $r) {
        
$options $options + [$r->id => $this->t($r->sGroupName ' - ' $r->sName),];
    }
    
asort($options);

    

$element += [
      
'#type' => 'select',
      
'#default_value' => isset($items[$delta]->value) ? $items[$delta]->value '',
      
'#size' => 1,
      
'#maxlength' => 255,
      
'#options' => $options,
      
'#empty' => $this->t('No Types found'),
      
'#element_validate' => [
        [
$this'TypesValidation'],
      ],
    ];
?>

Но формируется виджет с обычным select. Мне надо сгруппировать, т.е. добавить в этот select тег optgroup. Как это сделать?

Лучший ответ

Аватар пользователя pingvin156 pingvin156 28 июня 2019 в 6:48

Разобрался. В файле select.php есть пример:

<?php * @code
 
$form['example_select'] = [
 *   
'#type' => 'select',
 *   
'#title' => $this->t('Select element'),
 *   
'#options' => [
 *     
'1' => $this->t('One'),
 *     
'2' => [
 *       
'2.1' => $this->t('Two point one'),
 *       
'2.2' => $this->t('Two point two'),
 *     ],
 *     
'3' => $this->t('Three'),
 *   ],
 * ];
 * @
endcode?>

Комментарии

Аватар пользователя pingvin156 pingvin156 28 июня 2019 в 6:48

Разобрался. В файле select.php есть пример:

<?php * @code
 
$form['example_select'] = [
 *   
'#type' => 'select',
 *   
'#title' => $this->t('Select element'),
 *   
'#options' => [
 *     
'1' => $this->t('One'),
 *     
'2' => [
 *       
'2.1' => $this->t('Two point one'),
 *       
'2.2' => $this->t('Two point two'),
 *     ],
 *     
'3' => $this->t('Three'),
 *   ],
 * ];
 * @
endcode?>