Jak ustawić wartość pola pliku, gdy używasz podmiot_metadanych_wrapper?
Próbowałem zrobić to w kodzie:
$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);
Ale dostaję ten wyjątek:
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).
Każda pomoc jest bardzo mile widziana.
Właśnie znalazłem prostszy i mniej brzydki sposób ustawiania obrazu .
Podobnie jak odniesienie do taksonomii lub węzła / encji, nazwa pola pliku wskazuje na załadowany obiekt, tak właśnie się dowiaduję.
:: EDYCJA a posteriori ::
Tutaj, jak bym to zrobił z pytaniem OP.
źródło
new stdClass()
Komentarz zmylić mnie trochę, zakładając, że mogę przypisać nowo utworzony obiekt pliku do pola bezpośrednio. Korzystając z tego, upewnij się, że plik ma przypisany identyfikator FID (tj. Został zapisany co najmniej raz), w przeciwnym razie nie zadziała.$wrapper->field_photo[]->file->set($file)
ale nie jestem pewien. Czy kiedykolwiek spotkałeś się z tą sytuacją?Mój węzeł już istniał i musiałem ustawić następujące parametry:
Różne konfiguracje mogą wymagać różnych parametrów. Jeśli spojrzysz na swoje dzienniki błędów (admin / raporty / dblog), zobaczysz, jakie parametry są potrzebne.
źródło
display
było0
z jakiegoś powodu.Na wypadek, gdyby ktoś uznał to za pomocne:
Jeśli nie masz rzeczywistego uchwytu pliku i znasz tylko to,
fid
czego możesz użyć:I (zakładając, że istnieje plik z tym identyfikatorem) Drupal załączy poprawny plik
$wrapper->save()
.źródło
Możesz to zrobić na dwa sposoby:
Oto źródło informacji: https://www.drupal.org/docs/7/api/entity-api/entity-metadata-wrappers#example-value-set-save
źródło