Drupal: Как использовать наборы полей в hook_field_widget_form - PullRequest
4 голосов
/ 18 апреля 2011

Итак, у меня есть hook_field_schema, определяющая столбцы, и hook_field_widget_form настроен и правильно сохраняет все значения столбцов.

Но как только я помещаю два поля в набор полей, эти значения никогда не сохраняютсяили получить обновление.Я попытался установить #tree => FALSE повсюду, и это тоже не работает.

Чего мне не хватает?Это просто не поддерживается?Должен ли я использовать хук form_alter или что-то еще, чтобы переместить их в набор полей?

Ответы [ 3 ]

4 голосов
/ 13 мая 2011

У меня была такая же проблема, и я не мог найти решение.Перепробовав многие вещи, это оказалось так же просто, как и нелогично.Ну, в глазах новичка Drupal.

Сначала у меня было что-то вроде этого (урезанная версия):

$element['mymodulefieldset'] = array(
  '#title' => 'Fieldset title',
  '#type' => 'fieldset',
);

и добавленные поля к набору полей:

$element['mymodulefieldset']['fieldname'] = array(
  '#title' => "Field title",
  '#type' => 'textfield',
  '#default_value' => '',
);

Попробовав множество различных сценариев, я обнаружил, что следующие строки кода работают (вроде).Вместо вставки набора полей я превратил элемент в набор полей следующим образом:

$element += array(
  '#type' => 'fieldset',
  '#tree' => true
);

Затем я добавил поля к элементу:

$element['fieldname'] = array(
  '#title' => "Field title",
  '#type' => 'textfield',
  '#default_value' => '',
);

Примечание: некоторые переменные, такие как #title и#weight контролируется «Домой» Администрирование »Структура» Типы контента »[ТИП ВАШЕГО КОНТЕНТА]», другие (например, #collapsible и #collapsed) могут быть определены здесь.

Надеюсь, это поможет вам!*

3 голосов
/ 29 августа 2012

Я знаю, что это старый вопрос, но есть решение этой проблемы, объясненное в этой статье , часть #process - это то, что используется для правильного сохранения полей.

РЕДАКТИРОВАТЬ: Как объясняется в комментарии @alexkb, автор статьи обновил образец пользовательского поля и удалил хак #process. Для лучшего решения используйте код GitHub.

1 голос
/ 23 марта 2017

Посмотрите на физический модуль . В основном делать:

$element['#type'] = 'fieldset'

Вы можете определить подполя с помощью:

$element['subfield'] = array (...);
...