Программно добавить field_collections

Главные вкладки

Аватар пользователя SYr SYr 23 апреля 2021 в 19:27

Приветствую, господа Гуру!

Помогите пожалуйста решить задачку!
Дано: Д7+ entityform+ field_collections
В entityform создана форма с применением field_collections – все работает!
Задача в следующем: если при открытии формы, я вижу куки (которые сам создал свом модулем) – заполняю эту форму! Вроде все чудесно работает – спотыкнулся на коллекциях. Работаю с формой по hook_form_FORM_ID_alter(). Если есть несколько экземпляров коллекции – пробовал так: $form['field_languages']['und'][]=$form['field_languages']['und'][0];
Вроде отрабатывает, но не верно! Т.е. в $form['field_languages']['und'][1], в именах полей типа: «name="field_languages[und][0][field_language][und][0][value]"» - а должно быть: «name="field_languages[und][1][field_language][und][0][value]"»
Хотя дельту в контейнере менял на 1цу
С коллекциями работал – но там было понятно, т.к. привязывал к ноде.
Как тут поступать? Т.е. как в hook_form_FORM_ID_alter() программно нажать «добавить» ?

За ранее Спасибо

Комментарии

Аватар пользователя yaro yaro 24 апреля 2021 в 19:35
<?php
      $fc_options 
= [
        
'field_name' => 'field_machine_name',
        
'hostEntityType' => 'entity type',
        
'hostEntity' => $entity,
        
'is_new' => TRUE,
      ];

      

$field_collection = new FieldCollectionItemEntity($fc_options);
      
$field_collection->setHostEntity('entity type'$entity);

      

$field_collection->save();
?>

Не уверен что setHostEntity() надо
Ну и учтите, что ->save() сохраняет также и хост сущность, если не передать туда параметр TRUE (skiphostsave)

Аватар пользователя SYr SYr 25 апреля 2021 в 9:16

Здравствуйте!
Спасибо большое за ответ! Если Вас не затруднить – помогите, пока не получается.
Что передавать в качестве хоста, саму форму? И тип – это entityform.type ?
Вот код:

<?php
function sy_test_form_sy_test_entityform_edit_form_alter(&$form, &$form_state$form_id)
{
  
dsm($form);
  
$fc_options = [
    
'field_name' => 'field_vvv',
    
'hostEntityType' => 'sy_test',
    
'hostEntity' => $form,
    
'is_new' => TRUE,
  ];

  

$field_collection = new FieldCollectionItemEntity($fc_options);
  
$field_collection->setHostEntity('sy_test'$form);
  
$field_collection->save();
}
?>

Спасибо заранее!