Comment définissez-vous la valeur d'un champ de fichier lorsque vous utilisez l'entité_metadata_wrapper?
J'ai essayé de faire cela dans le code:
$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);
Mais je reçois cette exception:
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).
Toute aide est très appréciée.
Eh bien, je viens de découvrir un moyen plus simple et moins laid de définir l'image .
Tout comme la taxonomie ou la référence de nœud / entité, le nom du champ de fichier pointe sur un objet chargé, c'est comme ça que je le découvre.
:: MODIFIER a posteriori ::
Voici comment je l'aurais fait avec la question OP.
la source
new stdClass()
commentaire m'a un peu induit en erreur, en supposant que je pouvais affecter directement un objet fichier nouvellement créé à un champ. Lorsque vous utilisez ceci, assurez-vous que le fichier a une assignation fid (c'est-à-dire qu'il a été enregistré au moins une fois), sinon cela ne fonctionnera pas.$wrapper->field_photo[]->file->set($file)
mais je ne suis pas sûr. Avez-vous déjà fait face à cette situation?Mon nœud existait déjà et j'ai dû définir les paramètres suivants:
Différentes configurations peuvent nécessiter des paramètres différents, je suppose. Si vous regardez dans vos journaux d'erreurs (admin / reports / dblog), vous pouvez voir quels paramètres sont nécessaires.
la source
display
était0
pour une raison quelconque.Juste au cas où quelqu'un trouverait cela utile:
Si vous n'avez pas de descripteur de fichier réel et que
fid
vous ne connaissez que celui que vous pouvez utiliser:Et (en supposant qu'un fichier avec ce fid existe) Drupal attachera le fichier correct
$wrapper->save()
.la source
Vous avez deux façons de procéder:
Voici la source des informations: https://www.drupal.org/docs/7/api/entity-api/entity-metadata-wrappers#example-value-set-save
la source