Как предварительно заполнить поля 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. В последнем случае измените вес вашего модуля так, чтобы он срабатывал последним и гарантировал, что ваши изменения перезаписывают любые другие модули.