Рейтинг:0

Программно прикрепить изображение к полю

флаг as

Я использую Drupal 9.3.13 на локальном хосте. Я успешно генерирую QR-код на основе формата .SVG и сохраняю это изображение в общедоступном: //. Я создал различные типы полей, одним из которых является field_file_svg тип поля.

Цель состоит в том, чтобы прикрепить это существующее изображение, загруженное в каталог public://, и прикрепить его к field_file_svg. Я использую hook_entity_presave() за это. QR-код успешно сгенерирован и сохранен, но узел ничего не показывает.

В /admin/reports/dblog/ выдает следующую ошибку.

Предупреждение: создание объекта по умолчанию из пустого значения в urlist_entity_presave() (строка 83 C:\MAMP\htdocs\drupal9\modules\custom\urlist\urlist.module)

Этот код я использую

$qrcode = (новый QRCode($options))->render("$output");
$file_data = file_get_contents($qrcode);
$file = file_save_data($file_data, 'public://t10.svg', FileSystemInterface::EXISTS_REPLACE);

если (!пусто($файл)) { 
  $file_arr = массив(
    "target_id" => $file->id(),
    "альт" => "альт1",
    "заголовок" => "Заголовок1"
  );       
   
  $node->field_file_svg = $file_arr;
}
4uk4 avatar
флаг cn
Это не проблема друпала. См. https://stackoverflow.com/questions/8900701/creating-default-object-from-empty-value-in-php
mariosdaskalas avatar
флаг as
Спасибо что подметил это. Однако я не понимаю. Я использую версию PHP: 7.4.1. Ошибка в $node->field_file_svg = $file_arr;. Я не понимаю, что мне делать.
mariosdaskalas avatar
флаг as
@4uk4 Апач Версия клиента базы данных: libmysql - mysqlnd 7.4.1 Расширение PHP: mysqliDocumentation curlDocumentation mbstringDocumentation Версия PHP: 7.4.1
4uk4 avatar
флаг cn
Это предупреждение PHP означает, что вы пытаетесь установить поле для пустой переменной `$node`.
mariosdaskalas avatar
флаг as
@4uk4 Но как это пусто? Я назначаю его с помощью $node->field_file_svg = $file_arr; Я сбит с толку.
mariosdaskalas avatar
флаг as
@ 4uk4 Я использовал devel и видел структуру поля.
4uk4 avatar
флаг cn
В объекте \stdClass по умолчанию?
mariosdaskalas avatar
флаг as
@4uk4 Я использовал $node = new \stdClass(); $узел->успех = ложь; $node->field_file_svg = $file_arr; без ошибок в dblog. Тем не менее изображение успешно генерируется, но не прикрепляется к полю.
4uk4 avatar
флаг cn
Я воспринимаю это как подтверждение того, что devel показывает объект stdClass. Это не узел. Вы должны сначала назначить узел $node, чтобы установить значение поля для узла.
mariosdaskalas avatar
флаг as
@ 4uk4 Мне очень жаль, но я новичок в Drupal. Как я могу это сделать? С $node = Node::load(1);
mariosdaskalas avatar
флаг as
@4uk4 Я использовал dpm и print_r и вижу объект stdClass ( [success] => [field_file_svg] => Array ( [target_id] => 21 [alt] => Alt1 [title] => Title1 )) field_file_svg
mariosdaskalas avatar
флаг as
@4uk4 Я прекрасно вижу field_file_svg в fieldDefinitions, но не в массиве #values ​​в devel.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.