用于删除所有产品图像的Magento管理工具
Magento中是否有管理工具可以从所有产品中删除所有图像?我知道你可以逐个产品删除所有图片,但我想知道是否有一个管理工具可以同时处理所有产品用于删除所有产品图像的Magento管理工具,magento,Magento,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中,只是为了我自己的理智