Puncte:0

Atașați în mod programatic o imagine la un câmp

drapel as

Folosesc Drupal 9.3.13 pe localhost. Generez cu succes un cod QR bazat pe formatul .SVG și stochez acea imagine pe public://. Am creat diverse tipuri de câmpuri, dintre care unul este a field_file_svg tip de câmp.

Scopul este să atașați acea imagine existentă încărcată în directorul public:// și să o atașați la field_file_svg. eu folosesc hook_entity_presave() pentru asta. Codul QR este generat și stocat cu succes, dar nodul nu arată nimic.

În /admin/reports/dblog/ se afișează următoarea eroare.

Avertisment: se creează un obiect implicit din valoarea goală în urlist_entity_presave() (linia 83 din C:\MAMP\htdocs\drupal9\modules\custom\urlist\urlist.module)

Acesta este codul pe care îl folosesc

$qrcode = (nou QRCode($opțiuni))->render("$ieșire");
$file_data = file_get_contents($qrcode);
$file = file_save_data($file_data, 'public://t10.svg', FileSystemInterface::EXISTS_REPLACE);

dacă (!gol ($fișier)) { 
  $file_arr = matrice(
    "target_id" => $fișier->id(),
    "alt" => "Alt1",
    "title" => "Titlu1"
  );       
   
  $nod->field_file_svg = $file_arr;
}
4uk4 avatar
drapel cn
Aceasta nu este o problemă Drupal. Vedeți https://stackoverflow.com/questions/8900701/creating-default-object-from-empty-value-in-php
mariosdaskalas avatar
drapel as
Mulțumesc că ai subliniat asta. Totuși, nu înțeleg. Folosesc versiunea PHP: 7.4.1. Eroarea este la $node->field_file_svg = $file_arr;. Nu înțeleg ce ar trebui să fac.
mariosdaskalas avatar
drapel as
@4uk4 Apache Versiunea clientului bazei de date: libmysql - mysqlnd 7.4.1 Extensie PHP: mysqliDocumentation curlDocumentation mbstringDocumentation Versiunea PHP: 7.4.1
4uk4 avatar
drapel cn
Acest avertisment PHP înseamnă că încercați să setați câmpul pe o variabilă goală `$node`.
mariosdaskalas avatar
drapel as
@4uk4 Dar cum este gol? Îl atribui cu $node->field_file_svg = $file_arr; Sunt confuz.
mariosdaskalas avatar
drapel as
@4uk4 Am folosit devel și am văzut structura câmpului.
4uk4 avatar
drapel cn
Într-un obiect \stdClass implicit?
mariosdaskalas avatar
drapel as
@4uk4 Am folosit $node = new \stdClass(); $nod->succes = false; $nod->field_file_svg = $file_arr; fără erori în dblog. Totuși imaginea este generată cu succes, dar nu se atașează în câmp.
4uk4 avatar
drapel cn
Consider acest lucru ca o confirmare a dezvoltării care arată un obiect stdClass. Acesta nu este un nod. Mai întâi trebuie să atribuiți un nod la $node pentru a seta o valoare de câmp nodului.
mariosdaskalas avatar
drapel as
@4uk4 Îmi pare foarte rău, dar sunt nou în Drupal. Cum pot face acest lucru? Cu $node = Nod::load(1);
mariosdaskalas avatar
drapel as
@4uk4 Am folosit dpm și print_r și pot vedea obiectul stdClass ( [success] => [field_file_svg] => Array ( [target_id] => 21 [alt] => Alt1 [title] => Title1 ) ) field_file_svg
mariosdaskalas avatar
drapel as
@4uk4 Pot să văd field_file_svg în fieldDefinitions foarte bine, dar nu în matricea #values ​​din devel.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.