Bagaimana Anda mengatur nilai bidang file saat menggunakan entitas_metadata_wrapper?
Saya sudah mencoba melakukan ini dalam kode:
$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);
Tapi saya mendapatkan pengecualian ini:
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).
Setiap bantuan sangat dihargai.
Yah saya baru saja menemukan cara yang lebih sederhana dan tidak jelek untuk mengatur gambar .
Sama seperti taksonomi atau referensi simpul / entitas, nama bidang file menunjuk pada objek yang dimuat, begitulah cara saya mengetahuinya.
:: EDIT a posteriori ::
Di sini bagaimana saya akan melakukannya dengan pertanyaan OP.
sumber
new stdClass()
komentar menyesatkan saya sedikit, dengan asumsi saya bisa menetapkan objek file yang baru dibuat ke lapangan secara langsung. Saat menggunakan ini, pastikan file memiliki fid yang ditetapkan (yaitu telah disimpan setidaknya sekali), jika tidak ini tidak akan berfungsi.$wrapper->field_photo[]->file->set($file)
tapi saya tidak yakin. Pernahkah Anda menghadapi situasi ini?Node saya sudah ada dan saya harus mengatur parameter berikut:
Pengaturan yang berbeda mungkin memerlukan parameter yang berbeda kurasa. Jika Anda melihat log kesalahan Anda (admin / laporan / dblog) Anda dapat melihat parameter apa yang diperlukan.
sumber
display
adalah0
untuk beberapa alasan.Untuk berjaga-jaga kalau ada yang menemukan ini membantu:
Jika Anda tidak memiliki pegangan file yang sebenarnya dan hanya tahu
fid
Anda dapat menggunakan:Dan (dengan asumsi file dengan fid itu ada) Drupal akan melampirkan file yang benar
$wrapper->save()
.sumber
Anda memiliki dua cara untuk melakukannya:
Berikut adalah sumber informasinya: https://www.drupal.org/docs/7/api/entity-api/entity-metadata-wrappers#example-value-set-save
sumber