Всем доброго времени суток! Уважаемое сообщество помогите новичку решить следующий вопрос. Хочу сделать форму многозначного поля более красивей, а именно вложить fieldset в details в методе formElement виджете поля, что бы разделить поля формы. Но что бы я не делал, форма работать не хочет. То есть сохраненные ранее данные она выводит, но не сохраняет. Не подскажите возможно ли вообще (без дополнительных модулей) вложить несколько fieldset в detailes, или так просто, в виджете поля, этого с делать не получиться?
Комментарии
форма сама по себе ничего не сохраняет, сохраняет функция, которую эта форма вызывает, она есть?
Конечно все есть, делаю примерно так:
<?php
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $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? Я никак не пойму.
примерно так
'#type' => 'fieldset',
'#title' => $element['#title'],
'#open' => TRUE,
];
$element['fieldset']['item_1'] = [
'#type' => 'text',
'#title' => $element['#title'],
];
и опять же, форма ничего никуда не сохраняет, сохраняет submit
Не так тоже не работает, или использовать только один details, или только один fieldset, вместе они не работают. То что форму сохраняет submit это понятно, но как все это обрабатывается до submit -а, не понятно. Вот где засада…
а что за details такая? Чота не видел такой фигни в form api
Сворачивает форму, раньше писали collapsible, collapsed к примеру в том же fieldset, сейчас отдельный элемент details.
вот всек типы уоторые есть в форм апи
Ни collapsible, ни collapsed это не тип , а details так и вообще нету ни в каких ипостасях
или я не знаю куда смотреть?
На версию Друпал, к которой топик относится.
По сути - поставьте элементу details #tree в значение FALSE.
Не опять ничего не выходит, если прописать так:
<?php
$element['fields_group_1'] = [
$element['fields_group_2'] = [
$element['fields_group_1']['item_1'] = [
$element['fields_group_2']['item_1'] = [
$element['test_element'] = [];
$element += [
'#type' => 'details',
'#title' => $element['#title'],
'#open' => TRUE,
'#tree' => FALSE,
];
'#type' => 'fieldset',
'#title' => 'My title',
'#tree' => TRUE,
];
'#type' => 'fieldset',
'#title' => 'My title',
'#tree' => TRUE,
];
'#type' => 'textfield',
'#title' => 'My title',
'#tree' => TRUE,
'#parents' => ['fields_group_1'],
];
'#type' => 'textfield',
'#title' => 'My title',
'#tree' => TRUE,
'#parents' => ['fields_group_2'],
];
?>
В этом случаи вся форма перестает работать, даже поле test_element, которое я оставил специально для тестов перестает сохранять значение (details #tree true оно работает). Что я не так делаю? А то я не силен в этих #tree...
А может быть такое что он ищет в корне массива ключи определенные в методе propertyDefinitions? Если это так, получается что добавить больше чем один fieldse, или details так просто не получится.
Просто пройдите иксдебагом через сабмит и всё станет ясно.
При сабмите он создает массив с именем поля содержащий значение всех полей формы, поля же обернутые в fieldset вынесены за пределы этого массива, с ключами совпадающими с именами элементов fieldset (в моем случаи это fields_group_1, и fields_group_2) с присвоенными им пустыми значениями. Значит походу дела, он обрабатывает ключи только из корня массива, и никаких вложенных массивов не признает. Значит вложить fieldset в details так просто не получиться, да печалька...
Насколько я понимаю, вам нужно, стобы филдсет умел раскрываться и сворачиваться. Так почему бы не сделать это через js, не меняя структуру формы?
Да нет, я хочу создать поле которое выводило бы две таблицы, которые содержат достаточно много характеристик, и хотелось бы их разделить визуально, в форме редактирования материала. Но раз это так просто не получается сделать, ну и ладно. А так то один details или fieldset прикрутить можно, они по одному работают.
Может попробуйте поставить Field group?