Wie legen Sie den Wert eines Dateifelds fest, wenn Sie den entity_metadata_wrapper verwenden?
Ich habe versucht, dies im Code zu tun:
$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);
Aber ich bekomme diese Ausnahme:
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).
Jede Hilfe wird sehr geschätzt.
Nun, ich habe gerade eine einfachere und weniger hässliche Methode gefunden, um ein Bild zu erstellen .
Genau wie Taxonomie oder Knoten- / Entitätsreferenz zeigt der Dateifeldname auf ein geladenes Objekt, wie ich herausfinde.
:: A posteriori bearbeiten ::
Hier wie ich es mit OP Frage gemacht hätte.
quelle
new stdClass()
Kommentar führt mich ein wenig in die Irre, vorausgesetzt, ich könnte einem Feld direkt ein neu erstelltes Dateiobjekt zuweisen. Stellen Sie in diesem Fall sicher, dass der Datei eine FID zugewiesen wurde (dh sie wurde mindestens einmal gespeichert), da dies sonst nicht funktioniert.$wrapper->field_photo[]->file->set($file)
aber ich bin mir nicht sicher. Hast du jemals mit dieser Situation konfrontiert?Mein Knoten existierte bereits und ich musste die folgenden Parameter einstellen:
Unterschiedliche Einstellungen können unterschiedliche Parameter erfordern, nehme ich an. Wenn Sie in Ihren Fehlerprotokollen (admin / reports / dblog) nachsehen, können Sie sehen, welche Parameter benötigt werden.
quelle
display
es0
aus irgendeinem Grund war.Nur für den Fall, dass jemand dies hilfreich finden würde:
Wenn Sie kein tatsächliches Dateihandle haben und nur das kennen, das
fid
Sie verwenden können:Und (unter der Annahme, dass eine Datei mit dieser ID existiert) Drupal wird die richtige Datei anhängen
$wrapper->save()
.quelle
Sie haben zwei Möglichkeiten:
Hier ist die Quelle der Informationen: https://www.drupal.org/docs/7/api/entity-api/entity-metadata-wrapper#example-value-set-save
quelle