magento 2如何将基本或缩略图设置为产品

时间:2016-08-19 13:02:07

标签: magento2

我的问题是在yopu将图像添加到magento 2中的te prodcut后,如何设置为产品的默认图像(基本图像)。 我发现了如何将图像添加到产品中,但是可以找到将其设置为产品的基本图像。

3 个答案:

答案 0 :(得分:1)

加载产品后

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$product = $objectManager->create('Magento\Catalog\Model\Product')->load(PRODUCT ID);

您可以使用以下代码获取产品的所有图像:

$images = $product->getMediaGalleryImages();

这将返回一个包含添加到产品中的所有图像的集合。 您可以选择任何图像或拍摄第一张图像:

$image = $images->getFirstItem();

之后,你可以通过

获取图片网址
$imageUrl = $image->getFile();

要将其设置为产品,请执行以下操作:

$product->setImage($image);
$product->setSmallImage($image);
$product->setThumbnail($image);
$product->setSwatchImage($image);

并保存产品:

$product->save();

答案 1 :(得分:1)

获得所需的产品ID后,为每个产品编写如下代码

$product = $this->productRepository->getById($data['product_id']);
$mediaGalleryEntriesTemp = [];
$i = 1;
foreach ($product->getMediaGalleryEntries() as $item) {
    if ($i === 1) {
        $item->setTypes(['image', 'small_image', 'thumbnail']);
    }
    $mediaGalleryEntriesTemp[] = $item;
    $i++;
}
$product->setMediaGalleryEntries($mediaGalleryEntriesTemp);
$this->productRepository->save($product);
  

注意:' swatch_image '角色仅适用于简单产品或   可配置的子产品,而不是可配置的父产品

在我的测试之后,解决方案在Magento 2.2.3中工作,其他版本也应该工作。

答案 2 :(得分:0)

我的 Magento 2.3.3 解决方案并且工作正常

对我来说,我的场景有点不同,我需要现有产品的基本图像和小图像,并且我有图像名称:)

保存图像后,您可以使用此代码制作基础图像。



    $product = $objectManager->create('Magento\Catalog\Model\Product')->load($product->getId());
    $images = $product->getMediaGalleryEntries();
    $mediaGallery = $product->getMediaGallery();
    //if there are images
    if (isset($mediaGallery['images'])){
        //loop through the images
        foreach ($mediaGallery['images'] as $image){        
            // make the base image by name         
            if(strpos($image['file'], 'PRODUCT_NAME') !== false){
                $objectManager->get('Magento\Catalog\Model\Product\Action')->updateAttributes(array($product->getId()), array('image'=>$image['file'], 'small_image'=>$image['file']), 0);
                //stop
                break;
            } else{
                echo "can't find";
            }        
        }
    }

更改 PRODUCT_NAME 或如果不需要则删除 if-else 条件

希望对大家有帮助