Почему я не могу переместить поле в набор полей в форме Drupal - не удается подобрать текущее значение - PullRequest
3 голосов
/ 01 февраля 2011

У меня есть форма узла в Drupal 7, чтобы упростить ее для пользователя, я хочу разбить ее на разделы с помощью функции вертикальных вкладок.

Используя hook_form_FORMID_alter () я могу перемещать поля без затруднений. Когда узел сохранен, он правильно записывает значения, и они отображаются в представлении узла.

Но при повторном редактировании узла любое значение для перемещенного поля не устанавливается, поэтому я фактически теряю данные. Я пробовал различные варианты, включая изменение значения array_parents в form_state ['fields'] [field] [langcode].

(Мне было интересно, лучше ли будет вместо этого перемещать поля во время pre_render.)

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 01 февраля 2011

Поля API поля по умолчанию помещаются в контейнер типа поля.Если вы хотите преобразовать их в набор полей на вертикальных вкладках, вы можете сделать следующее:

$form['field_tags']['#type'] = 'fieldset';
$form['field_tags']['#title'] = 'Tags';
$form['field_tags']['#group'] = 'additional_settings';

Лучшим решением было бы использовать новый модуль группы полей , чтобы вы могливносите эти изменения через пользовательский интерфейс, а не в код.

2 голосов
/ 01 февраля 2011

Иногда лучше перемещать элементы поля на шаге #after_build процесса создания формы.

в hook_form_alter, вы устанавливаете свою функцию после сборки следующим образом:

function mymodule_form_alter(&$form, &$form_state, $form_id)
{
    $form['#after_build'][] = 'mymodule_myform_after_build';
}

Затем вы определяете свою функцию after_build следующим образом:

function mymodule_myform_after_build($form)
{
   //do stuff to the form array
   return $form;
}

Я думаю, вы даже можете определить after_build для отдельных элементов.

В любом случае, это хороший способ изменить форму после того, как все модули имеютсделал свое дело.

...