Привет, и это мой код:

$imgURL = 'path/to/my/image.png';
$fileSystem = $objectManager->create('\Magento\Framework\Filesystem');
$mediaPath = $fileSystem->getDirectoryRead(\Magento\Framework\App\Filesystem\DirectoryList::MEDIA)->getAbsolutePath();

$product->addImageToMediaGallery($mediaPath.'catalog/product'.$data['thumbnail_image'],['thumbnail', 'swatch'], false, false);
$product->setThumbnail($mediaPath.'catalog/product'.$imgURL);
$product->save();

Чего я хочу добиться, так это программно назначить изображение и установить его в качестве миниатюры. Приведенный выше код загружает изображение, но его роль: миниатюра и образец не выбраны. Не уверен, почему? См. изображение: введите здесь описание изображения

Можете ли вы сказать мне, что я делаю неправильно? Спасибо

0
Attila Naghi 10 Янв 2022 в 16:37

1 ответ

Вам не нужно явно указывать миниатюру, достаточно следующей строки:

$product->addImageToMediaGallery($mediaPath.'catalog/product'.$data['thumbnail_image'],['thumbnail', 'swatch'], false, false);

Что касается образца изображения, у вас неправильно указано в массиве, вместо «образца» должно быть «swatch_image». Доступны следующие типы носителей:

  • образ
  • small_image
  • миниатюрами
  • swatch_image

Вам также следует подумать об изменении размера изображений после их установки таким образом с помощью Magento\Catalog\Helper\Image:

$this->imageHelper->init($product, 'product_thumbnail_image');
$this->imageHelper->resize($width, $height);

Кроме того, проверьте etc/view.xml вашей темы, чтобы узнать больше идентификаторов изображений («wishlist_thumbnail», «mini_cart_product_thumbnail» и т. д.).

0
Robert 11 Янв 2022 в 14:10