Como você define o valor de um campo de arquivo ao usar o entity_metadata_wrapper?
Eu tentei fazer isso no código:
$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);
Mas eu recebo esta exceção:
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).
Qualquer ajuda é muito apreciada.
Bem, acabei de descobrir uma maneira mais simples e menos feia de definir uma imagem .
Assim como a taxonomia ou referência de nó / entidade, o nome do campo do arquivo aponta para um objeto carregado, é assim que eu descubro.
:: EDIT a posteriori ::
Aqui como eu faria isso com a pergunta OP.
fonte
new stdClass()
comentário me enganou um pouco, supondo que eu pudesse atribuir um objeto de arquivo recém-criado a um campo diretamente. Ao usar isso, verifique se o arquivo foi atribuído com fid (ou seja, ele foi salvo pelo menos uma vez), caso contrário, isso não funcionará.$wrapper->field_photo[]->file->set($file)
mas não tenho certeza. Você já enfrentou essa situação?Meu nó já existia e eu tive que definir os seguintes parâmetros:
Diferentes configurações podem exigir parâmetros diferentes, suponho. Se você procurar em seus logs de erro (admin / reports / dblog), poderá ver quais parâmetros são necessários.
fonte
display
foi0
por algum motivo.Apenas no caso de alguém achar isso útil:
Se você não possui um identificador de arquivo real e sabe apenas o
fid
que pode usar:E (supondo que exista um arquivo com esse fid), o Drupal anexará o arquivo correto
$wrapper->save()
.fonte
Você tem duas maneiras de fazer isso:
Aqui está a fonte das informações: https://www.drupal.org/docs/7/api/entity-api/entity-metadata-wrappers#example-value-set-save
fonte