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

Аватар пользователя Rmaydar

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

Тип материала:
Версия Drupal:
0 Thanks

Комментарии

Аватар пользователя Olegars
Olegars 4 недели назад

форма сама по себе ничего не сохраняет, сохраняет функция, которую эта форма вызывает, она есть?

Аватар пользователя Rmaydar
Rmaydar 4 недели назад

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

<?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 4 недели назад

примерно так

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

  ];

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

Аватар пользователя Rmaydar
Rmaydar 4 недели назад

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

Аватар пользователя Olegars
Olegars 4 недели назад

а что за details такая? Чота не видел такой фигни в form api

Аватар пользователя Rmaydar
Rmaydar 4 недели назад

Сворачивает форму, раньше писали collapsible, collapsed к примеру в том же fieldset, сейчас отдельный элемент details.

Аватар пользователя Olegars
Olegars 4 недели назад

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

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

Аватар пользователя fairrandir
fairrandir 4 недели назад
Olegars написал:
или я не знаю куда смотреть?

На версию Друпал, к которой топик относится.

Аватар пользователя fairrandir
fairrandir 4 недели назад
1

По сути - поставьте элементу details #tree в значение FALSE.

Аватар пользователя Rmaydar
Rmaydar 4 недели назад

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

<?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 4 недели назад

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

Аватар пользователя gun_dose
gun_dose 4 недели назад

Просто пройдите иксдебагом через сабмит и всё станет ясно.

Аватар пользователя Rmaydar
Rmaydar 3 недели назад

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

Аватар пользователя gun_dose
gun_dose 3 недели назад

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

Аватар пользователя Rmaydar
Rmaydar 3 недели назад

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

Аватар пользователя gun_dose
gun_dose 3 недели назад

Может попробуйте поставить  Field group?