Как программно заполнить поле изображения в коллекции полей?


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

У меня есть поле на узле под названием field_signature_media, которое ссылается на коллекцию полей, которая может быть разнообразие типов носителей. В коллекции полей у меня есть field_signature_image для обработки изображений.

Попытка первая: использование entity_metadata_wrapper:

    // Image file created in earlier part of the process and loaded into $file
    // The node that's being worked on has been created in $node
    // Create the field collection
    $fc_item = entity_create('field_collection_item', array('field_name' => 'field_signature_media'));
    $fc_item->setHostEntity('node', $node);
    $fc_wrapper = entity_metadata_wrapper('field_collection_item', $fc_item);

    $field = array('alt' => '',
          'title' => '',
          'fid' => $file->fid,
          'display' => 1,
          'width' => $file->image_dimensions['width'],
          'height' => $file->image_dimensions['height'],
          'image_field_caption' => array
              (
                  'value' => '',
                  'format' => 'full_html',
              ),              
    );

    $fc_wrapper->field_signature_image->set($field);
    $fc_wrapper->save(true);  // <-- at this point it enters infinite recursion.
    field_attach_update('node', $node);

Вторая попытка без оболочки:

    $fc_item = entity_create('field_collection_item', array('field_name' => 'field_signature_media'));
    $fc_item->field_signature_image[LANGUAGE_NONE][] = 
                        array('alt' => '',
                              'title' => '',
                              'fid' => $file->fid,
                              'display' => 1,
                              'width' => $file->image_dimensions['width'],
                              'height' => $file->image_dimensions['height'],
                              'image_field_caption' => array
                                  (
                                      'value' => '',
                                      'format' => 'full_html',
                                  ),
                        );
    $fc_item->setHostEntity('node', $node);
    $fc_item->save(TRUE);
    field_attach_update('node', $node); // <-- At this point field_collection cannot find an array it was expecting.

Попытка три с оболочкой и без создания данных поля вручную:

    $fc_item = entity_create('field_collection_item', array('field_name' => 'field_signature_media'));
    $fc_item->setHostEntity('node', $node);
    $fc_wrapper = entity_metadata_wrapper('field_collection_item', $fc_item);  
    $fc_wrapper->field_signature_image->set($file->fid);
    $fc_wrapper->save(true);  // <-- at this point it enters infinite recursion.
    field_attach_update('node', $node);
Author: kenorb, 2014-05-15

1 answers

Не должно быть никакой разницы между установкой поля на узле и элементом коллекции полей.

Это должно сработать

$fc_wrapper->field_signature_image->file->set($file);

Это также должно сработать

$fc_wrapper->field_signature_image = (array) $file;

Предполагая, что $file является допустимым файловым объектом. Когда у меня возникают проблемы с добавлением файлов, обычно это происходит из-за того, что у меня отсутствует свойство. В этом случае я создам элемент сбора узлов и полей через пользовательский интерфейс, а затем dpm(), чтобы посмотреть, чего нам не хватает. Половину времени это $file->display, а остальное обычно $file->description. Мой предполагаю, что $file->description - это ваша проблема.

Чего я не помню, так это того, изменяет ли это использование Файловой сущности . Обе строки выше основаны на сценариях импорта, которые у меня есть, где этот модуль отключен.

 2
Author: mpdonadio, 2014-05-15 22:43:44