Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于删除所有产品图像的Magento管理工具_Magento - Fatal编程技术网

用于删除所有产品图像的Magento管理工具

用于删除所有产品图像的Magento管理工具,magento,Magento,Magento中是否有管理工具可以从所有产品中删除所有图像?我知道你可以逐个产品删除所有图片,但我想知道是否有一个管理工具可以同时处理所有产品 提前感谢。我不知道您为什么要这样做,但这里有一种直接从数据库中执行的方法 备份然后截断这两个表: 目录\产品\实体\媒体\图库 目录\产品\实体\媒体\画廊\价值 然后删除“/media/catalog/product” 清除所有缓存 我还没有测试过,但应该可以。如果它不起作用,则恢复这两个表此方法经过测试,确实有效。您可能希望这样做的一个原因是在测试产

Magento中是否有管理工具可以从所有产品中删除所有图像?我知道你可以逐个产品删除所有图片,但我想知道是否有一个管理工具可以同时处理所有产品


提前感谢。

我不知道您为什么要这样做,但这里有一种直接从数据库中执行的方法

  • 备份然后截断这两个表:

    目录\产品\实体\媒体\图库 目录\产品\实体\媒体\画廊\价值

  • 然后删除“/media/catalog/product”

  • 清除所有缓存


  • 我还没有测试过,但应该可以。如果它不起作用,则恢复这两个表

    此方法经过测试,确实有效。您可能希望这样做的一个原因是在测试产品的数据流导入时。当您在上载中指定图像时,Magento只添加图像-它不会替换或删除图像

    最终的结果是,一个配置文件的多次运行将积累大量多余的图像

    mysql> **truncate catalog_product_entity_media_gallery;**
    mysql> **truncate catalog_product_entity_media_gallery_value;**
    
    然后,在Magento介质/目录文件夹的命令提示符下:

    media/catalog$ **rm -rf ./product/**
    

    通过DB执行此操作是一个坏主意,但如果必须:

    ALTER TABLE `catalog_product_entity_media_gallery_value` 
     DROP FOREIGN KEY `FK_CAT_PRD_ENTT_MDA_GLR_VAL_STORE_ID_CORE_STORE_STORE_ID`,
     DROP FOREIGN KEY `FK_CAT_PRD_ENTT_MDA_GLR_VAL_VAL_ID_CAT_PRD_ENTT_MDA_GLR_VAL_ID`;
    
    TRUNCATE `catalog_product_entity_media_gallery_value`;
    TRUNCATE `catalog_product_entity_media_gallery`;
    
    ALTER TABLE `catalog_product_entity_media_gallery_value` 
     ADD CONSTRAINT `FK_CAT_PRD_ENTT_MDA_GLR_VAL_STORE_ID_CORE_STORE_STORE_ID` FOREIGN KEY (`store_id`) REFERENCES `core_store` (`store_id`) ON DELETE CASCADE ON UPDATE CASCADE,
     ADD CONSTRAINT `FK_CAT_PRD_ENTT_MDA_GLR_VAL_VAL_ID_CAT_PRD_ENTT_MDA_GLR_VAL_ID` FOREIGN KEY (`value_id`) REFERENCES `catalog_product_entity_media_gallery` (`value_id`) ON DELETE CASCADE ON UPDATE CASCADE;
    
    然后,您可以使用以下命令删除产品文件夹:

    cd media/catalog/product
    rm -rf *
    
    我就是这样修好的:

        public function __construct(
            \Magento\Catalog\Model\Product $product,
            \Magento\Framework\App\ResourceConnection $resource,
            \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
            \Magento\Catalog\Model\Product\Gallery\Processor $processor
        ) {
            $this->productRepository = $productRepository;
            $this->product = $product;
            $this->resource = $resource;
            $this->processor = $processor;
        }
    
        protected function removeImageGallery($product)
        {
            try {
                $gallery = $this->resource->getTableName('catalog_product_entity_media_gallery');
                $galleryValue = $this->resource->getTableName('catalog_product_entity_media_gallery_value');
    
                $sql = <<<EOT
    DELETE FROM {$gallery}
    WHERE value_id IN (SELECT value_id FROM {$galleryValue} WHERE entity_id = {$product->getId()})
    EOT;
    
                $response = $this->resource->getConnection()->query($sql);
    
                echo '(' . $product->getTypeId() . '): ' . $product->getSku() . " - No. Images: " . $response->rowCount() .  "\n";
    
    
    //            // Or if you want to try the Magento way
    //
    //            $images = $product->getMediaGalleryImages();
    //            foreach($images as $child){
    //                echo '(' . $product->getTypeId() . '): ' . $product->getSku() . ' - ' . $child->getFile() . "\n";
    //                $this->processor->removeImage($product, $child->getFile());
    //            }
    //
    //            $this->productRepository->save($product);
    
            } catch (\Exception $e) {
                echo $e->getMessage() . "\n";
            }
        }
    
    public function\uuuuu构造(
    \Magento\Catalog\Model\Product$Product,
    \Magento\Framework\App\ResourceConnection$resource,
    \Magento\Catalog\Api\ProductRepositoryInterface$productRepository,
    \Magento\Catalog\Model\Product\Gallery\Processor$Processor
    ) {
    $this->productRepository=$productRepository;
    $this->product=$product;
    $this->resource=$resource;
    $this->processor=$processor;
    }
    受保护的功能removeImageGallery($product)
    {
    试一试{
    $gallery=$this->resource->getTableName('catalog\u product\u entity\u media\u gallery');
    $galleryValue=$this->resource->getTableName('catalog\u product\u entity\u media\u gallery\u value');
    $sql=getConnection()->query($sql);
    回显“('.$product->getTypeId()”):'.$product->getSku()”-No.Images:“.$response->rowCount()”\n”;
    ////或者如果你想试试Magento的方法
    //
    //$images=$product->getMediaGalleryImage();
    //foreach($child形式的图像){
    //回显'('.$product->getTypeId().'):'.$product->getSku().-'.$child->getFile().“\n”;
    //$this->processor->removeImage($product,$child->getFile());
    //            }
    //
    //$this->productRepository->save($product);
    }捕获(\异常$e){
    echo$e->getMessage()。“\n”;
    }
    }
    
    这项功能非常有效,可以防止在开发阶段针对产品生成重复的图像。应标记为正确答案。在尝试截断表时,我不断收到错误#1701-无法截断外键约束中引用的表(
    dbname
    catalog\u product\u entity\u media\u gallery\u value
    ),约束
    FK\u catalog\u product\u media\u gallery\u value\u gallery
    外键(
    value\u id
    )引用
    dbname
    `catalog\u pro)我也收到了外键约束消息。我用“从目录\产品\实体\媒体\图库中删除”删除了所有记录,最终得到了相同的结果。这对我来说很有效,尽管我更喜欢从内部将cd刻录到目录本身media/catalog/product/然后rm-rf中,只是为了我自己的理智