我在Magento中有一个自定义模块,可以自动更新FTP目录中的产品图像。使用新图像更新产品时,我需要手动Flush catalog image cache
在前端显示新图像。但是,这会清除所有图像缓存,并且拥有数千种产品的库,这不是一个真正的选择。
是否可以在PHP
?
答案 0 :(得分:4)
不幸的是,Magento(afaik)没有提供原生功能。在* nix上,您可以使用Shell在缓存文件夹中搜索(小写)SKU并删除它们。
请注意,PHP需要执行shell命令的权限才能使下面的代码正常工作。在调用:: findCacheImages之后,您可以遍历结果并删除缓存的图像。
我的一个班级的例子:
/**
* Get array of all files in the image cache tree. Provide all SKU at once for better performance.
*
* @param array $skus
* @return array
*/
static public function findCacheImages(Array $skus)
{
if (!$skus) {
return array();
}
$skus = array_unique($skus);
$toSearch = array();
$result = array();
while (count($skus) > 0) {
$sku = array_pop($skus);
if (trim($sku) != '') {
$toSearch[] = $sku;
}
if (count($toSearch) > 50 || count($skus) == 0) {
// Perform file search
$bigRegex = array();
foreach ($toSearch as $fName) {
// Build regex
$bigRegex[] = '.*/' . strtolower($fName) . '.*';
}
$bigRegexStr = implode('|', $bigRegex);
$dir = escapeshellcmd(Mage::getBaseDir() . '/media/catalog/product/cache/');
$result = array_merge(self::findFilesRegex($dir, $bigRegexStr), $result);
$toSearch = array();
}
}
return $result;
}
/**
* @param string $dir
* @param string $regex
* @return array
*/
static public function findFilesRegex($dir, $regex)
{
$files = shell_exec("find $dir -type f -regextype posix-extended -regex '$regex' -print");
$files = explode("\n", trim($files));
return $files;
}
答案 1 :(得分:2)
如果您正在谈论默认的Magento缓存,那么您可以使用导入图像功能结尾处的以下代码来刷新缓存
Mage::app()->cleanCache('catalog_product_'.$productId);