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

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

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

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

Комментарии

Аватар пользователя Rmaydar Rmaydar 19 июля 2018 в 10:33

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

<?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? Я никак не пойму.

Аватар пользователя Olegars Olegars 19 июля 2018 в 11:02

примерно так

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

  ];

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

Аватар пользователя Rmaydar Rmaydar 19 июля 2018 в 12:35

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

Аватар пользователя Olegars Olegars 19 июля 2018 в 18:51

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

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 так и вообще нету ни в каких ипостасях
или я не знаю куда смотреть?

Аватар пользователя Rmaydar Rmaydar 19 июля 2018 в 22:22

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

<?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...

Аватар пользователя Rmaydar Rmaydar 19 июля 2018 в 22:47

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

Аватар пользователя Rmaydar Rmaydar 20 июля 2018 в 19:29

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

Аватар пользователя gun_dose gun_dose 20 июля 2018 в 20:19

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

Аватар пользователя Rmaydar Rmaydar 20 июля 2018 в 21:51

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