Как установить значение поля файла при использовании entity_metadata_wrapper?
Я пытался сделать это в коде:
$file = new stdClass();
$file->uid = 1;
$file->uri = $file_path;
$file->filename = basename($file_path);
$file->filemime = file_get_mimetype($file_path);
$file->filesize = filesize($file_path);
$file->status = FILE_STATUS_PERMANENT;
$file->display = '1';
file_save($file); // I also tried: $file = file_save($file);
$node = array(
'type' => 'news_item',
'uid' => 1,
'status' => 1,
'comment' => 0,
'promote' => 0,
'language' => 'en',
);
$entity = entity_create('node', $node);
$ewrapper = entity_metadata_wrapper('node', $entity);
$ewrapper->field_document->set((array) $file); // I also tried: $ewrapper->field_document->set($file);
$ewrapper->save(true);
entity_save('node', $entity);
Но я получаю это исключение:
EntityMetadataWrapperException: Invalid data value given. Be sure it matches the required data type and format. in EntityMetadataWrapper->set() (line 122 of C:\wamp\www\drupal\sites\all\modules\entity\includes\entity.wrapper.inc).
Любая помощь очень ценится.
Ну, я только что нашел более простой и менее уродливый способ установки изображения .
Так же, как таксономия или ссылка на узел / сущность, имя поля файла указывает на загруженный объект, вот как я узнаю.
:: РЕДАКТИРОВАТЬ апостериори ::
Вот как бы я это сделал с OP вопросом.
источник
new stdClass()
Комментарий ввести в заблуждение меня немного, предполагая , что я мог бы назначить вновь созданный объект файла в поле непосредственно. При использовании этого убедитесь, что файлу назначен fid (т.е. он был сохранен хотя бы один раз), иначе это не будет работать.$wrapper->field_photo[]->file->set($file)
но я не уверен. Вы когда-нибудь сталкивались с такой ситуацией?Мой узел уже существует, и мне пришлось установить следующие параметры:
Полагаю, для разных настроек могут потребоваться разные параметры. Если вы посмотрите в журналах ошибок (admin / reports / dblog), вы увидите, какие параметры нужны.
источник
display
было0
по какой-то причине.На всякий случай кто-нибудь найдет это полезным:
Если у вас нет фактического дескриптора файла и
fid
вы знаете только то, что вы можете использовать:И (при условии, что файл с таким fid существует) Drupal прикрепит правильный файл
$wrapper->save()
.источник
У вас есть два способа сделать это:
Вот источник информации: https://www.drupal.org/docs/7/api/entity-api/entity-metadata-wrappers#example-value-set-save
источник