Как предварительно заполнить поля Field Collection в Drupal 7?

У меня есть тип контента, который может содержать неограниченное количество экземпляров коллекции встроенных полей field_fooкаждая коллекция содержит два поля: field_foo_bar а также field_foo_baz,

Я хочу изменить форму создания узла для этого типа контента, чтобы предварительно заполнить field_foo со значениями из того же поля на существующем узле.

По умолчанию форма создания узла имеет:

FIELD FOO

FOO BAR [            ]
FOO BAZ [            ]

... и я хотел бы установить, например:

FIELD FOO

FOO BAR [Bar value #1]
FOO BAZ [Baz value #1]

FOO BAR [Bar value #2]
FOO BAZ [Baz value #2]

Как я могу это сделать? Я чувствую, что упускаю что-то прямое.

Я попытался просто клонировать пустую коллекцию полей в hook_form_alter() и изменить field_foo_bar а также field_foo_baz значения подходят, но это вызывает проблемы при добавлении / удалении строк и настройке нескольких дельт, весов и т. д., и кажется, что я лаю не на том дереве.

2 ответа

Поскольку коллекции полей на самом деле являются сущностями, не могли бы вы использовать hook_entity_insert(), чтобы проверить, является ли вставляемая сущность экземпляром вашей коллекции полей, и если это так, установить значения.

hook_form_alter - правильный способ сделать это. Если возникают другие проблемы, это потому, что вы не заполнили поле правильно или потому, что другой модуль также редактирует поля после вас. В первом случае проверьте формат поля в hook_node_insert. В последнем случае измените вес вашего модуля так, чтобы он срабатывал последним и гарантировал, что ваши изменения перезаписывают любые другие модули.

Другие вопросы по тегам