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

时间:2012-05-24 22:12:40

标签: magento

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

提前致谢。

4 个答案:

答案 0 :(得分:11)

我不确定您为什么要这样做,但这是一种直接从数据库中执行此操作的方法。

  1. 备份然后截断这两个表:

    catalog_product_entity_media_gallery catalog_product_entity_media_gallery_value

  2. 然后删除'/ media / catalog / product'

  3. 清除所有缓存。

  4. 我没有测试过,但应该做好。如果它不起作用,那么恢复那两个表

答案 1 :(得分:3)

此方法已经过测试并且确实有效。您可能希望这样做的一个原因是您正在测试产品的Dataflow Import。在上传中指定图像时,Magento仅添加图像 - 它不会替换或删除它们。

最终结果是,一些配置文件的运行会积累许多多余的图像。

mysql> **truncate catalog_product_entity_media_gallery;**
mysql> **truncate catalog_product_entity_media_gallery_value;**

然后,从Magento媒体/目录文件夹的命令提示符处:

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

答案 2 :(得分:2)

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

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 *

答案 3 :(得分:0)

我是如何修理它的。 我希望它可以帮助别人。

    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";
        }
    }