Как вложить fieldset в details в виджете поля

18 июля 2018 в 21:33
Аватар пользователя Rmaydar Rmaydar 0 16

Всем доброго времени суток! Уважаемое сообщество помогите новичку решить следующий вопрос. Хочу сделать форму многозначного поля более красивей, а именно вложить fieldset в details в методе formElement виджете поля, что бы разделить поля формы. Но что бы я не делал, форма работать не хочет. То есть сохраненные ранее данные она выводит, но не сохраняет. Не подскажите возможно ли вообще (без дополнительных модулей) вложить несколько fieldset в detailes, или так просто, в виджете поля, этого с делать не получиться?

Комментарии

Конечно все есть, делаю примерно так:

<?php
 
public function formElement(FieldItemListInterface $items$delta, array $element, array &$formFormStateInterface $form_state) {
  
$element += [
    
'#type' => 'details',
    
'#title' => $element['#title'],
    
'#open' => TRUE,
  ];
  
$element['item_1'] = [];
  
$element['item_2'] = [];
  
$element['item_3'] = [];
  
$element['item_4'] = [];

  return 

$element;
}
?>

Так все работает, но стоит добавить fieldset как форма перестает работать. Вот куда нужно прописать fieldset, что бы сгруппировать item_1 c item_2, и item_3 с item_4? Я никак не пойму.

19 июля 2018 в 10:33

примерно так

 $element['fieldset'] = [
    '#type' => 'fieldset',
    '#title' => $element['#title'],
    '#open' => TRUE,
  ];
$element['fieldset']['item_1'] = [
    '#type' => 'text',
    '#title' => $element['#title'],

  ];

и опять же, форма ничего никуда не сохраняет, сохраняет submit

19 июля 2018 в 11:02

Не так тоже не работает, или использовать только один details, или только один fieldset, вместе они не работают. То что форму сохраняет submit это понятно, но как все это обрабатывается до submit -а, не понятно. Вот где засада…

19 июля 2018 в 12:35

вот всек типы уоторые есть в форм апи

checkbox checkboxes date fieldset file machine_name managed_file password password_confirm radio radios select tableselect text_format textarea textfield vertical_tabs

Ни collapsible, ни collapsed это не тип , а details так и вообще нету ни в каких ипостасях
или я не знаю куда смотреть?

19 июля 2018 в 18:51

Не опять ничего не выходит, если прописать так:

<?php
$element 
+= [
    
'#type' => 'details',
    
'#title' => $element['#title'],
    
'#open'  => TRUE,
    
'#tree' => FALSE,
  ];

  

$element['fields_group_1'] = [
    
'#type' => 'fieldset',
    
'#title'  => 'My title',
    
'#tree' => TRUE,
  ];

  

$element['fields_group_2'] = [
    
'#type' => 'fieldset',
    
'#title'  => 'My title',
    
'#tree' => TRUE,
  ];

  

$element['fields_group_1']['item_1'] = [
    
'#type' => 'textfield',
    
'#title' => 'My title',
    
'#tree' => TRUE,
    
'#parents' => ['fields_group_1'],
  ];

  

$element['fields_group_2']['item_1'] = [
    
'#type' => 'textfield',
    
'#title' => 'My title',
    
'#tree' => TRUE,
    
'#parents' => ['fields_group_2'],
  ];

  

$element['test_element'] = [];
?>

В этом случаи вся форма перестает работать, даже поле test_element, которое я оставил специально для тестов перестает сохранять значение (details #tree true оно работает). Что я не так делаю? А то я не силен в этих #tree...

19 июля 2018 в 22:22

А может быть такое что он ищет в корне массива ключи определенные в методе propertyDefinitions? Если это так, получается что добавить больше чем один fieldse, или details так просто не получится.

19 июля 2018 в 22:47

При сабмите он создает массив с именем поля содержащий значение всех полей формы, поля же обернутые в fieldset вынесены за пределы этого массива, с ключами совпадающими с именами элементов fieldset (в моем случаи это fields_group_1, и fields_group_2) с присвоенными им пустыми значениями. Значит походу дела, он обрабатывает ключи только из корня массива, и никаких вложенных массивов не признает. Значит вложить fieldset в details так просто не получиться, да печалька...

20 июля 2018 в 19:29

Насколько я понимаю, вам нужно, стобы филдсет умел раскрываться и сворачиваться. Так почему бы не сделать это через js, не меняя структуру формы?

20 июля 2018 в 20:19

Да нет, я хочу создать поле которое выводило бы две таблицы, которые содержат достаточно много характеристик, и хотелось бы их разделить визуально, в форме редактирования материала. Но раз это так просто не получается сделать, ну и ладно. А так то один details или fieldset прикрутить можно, они по одному работают.

20 июля 2018 в 21:51