¿Cómo se configura el valor de un campo de archivo cuando se utiliza entity_metadata_wrapper?
He intentado hacer esto en 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);
Pero me sale esta excepción:
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).
Cualquier ayuda es muy apreciada por Mych.
Bueno, acabo de descubrir una forma más simple y menos fea de configurar la imagen .
Al igual que la referencia de taxonomía o nodo / entidad, el nombre del campo de archivo apunta a un objeto cargado, así es como me entero.
:: EDITAR a posteriori ::
Aquí cómo lo hubiera hecho con la pregunta OP.
fuente
new stdClass()
comentario me confunde un poco, suponiendo que pueda asignar un objeto de archivo recién creado a un campo directamente. Al usar esto, asegúrese de que el archivo tenga un fid asignado (es decir, se ha guardado al menos una vez), de lo contrario, esto no funcionará.$wrapper->field_photo[]->file->set($file)
pero no estoy seguro. ¿Alguna vez has enfrentado esta situación?Mi nodo ya existía y tuve que establecer los siguientes parámetros:
Diferentes configuraciones pueden requerir diferentes parámetros, supongo. Si mira en sus registros de errores (admin / reports / dblog) puede ver qué parámetros son necesarios.
fuente
display
estaba0
por alguna razón.Por si alguien lo encontraría útil:
Si no tiene un identificador de archivo real y solo conoce el
fid
que puede usar:Y (suponiendo que exista un archivo con ese fid) Drupal adjuntará el archivo correcto
$wrapper->save()
.fuente
Tienes dos formas de hacerlo:
Aquí está la fuente de la información: https://www.drupal.org/docs/7/api/entity-api/entity-metadata-wrappers#example-value-set-save
fuente