【发布时间】:2014-07-29 15:40:37
【问题描述】:
我有一个基于Tim Bezhashvyly 帖子的功能,该功能是关于在 Magento 中从 url 调整图像大小。我的问题在于缓存以及当有人更改同名图像时。
示例:我有一个供应商徽标,名称是:mylogo.png。如果我想用不同的徽标更改此徽标但名称相同:mylogo.png 徽标的前端版本不会更改,因为该功能检查是否有 mylogo.png 的缓存版本并且有一个因此它显示旧的。
上传的标志不是我做的,而是供应商做的,我不能阻止他将所有他的标志版本命名为 logo.png。我需要一个聪明的方法来改变缓存系统。每次加载前端页面时都会调用此函数,这就是为什么我需要缓存我不想在每次加载页面时调整大小的图像。
public function resizeImage($path='',$width=100,$height=null,$constrainOnly=true,$keepAspectRatio=true,$keepFrame=true,$keepTransparency=true){
$Tpath = explode('/',$path);
$end = end($Tpath);
$path = '';
for ($i=0; $i < count($Tpath)-1 ; $i++) {
if($i!=count($Tpath)){
$path .= $Tpath[$i].'/';
}else{
}
}
if($end!='')$_file_name = $end;
else $_file_name = '404.png';
$_media_dir = Mage::getBaseDir('media') . DS . $path;
$cache_path = $path . 'cache' . DS . $width.'X'.$height . DS;
$cache_dir = $_media_dir . 'cache' . DS . $width.'X'.$height . DS;
if (file_exists($cache_dir . $_file_name)) {
return Mage::getBaseUrl('media') . $cache_path . $_file_name;
} elseif (file_exists($_media_dir . $_file_name)) {
if (!is_dir($cache_dir)) {
mkdir($cache_dir);
}
$_image = new Varien_Image($_media_dir . $_file_name);
$_image->constrainOnly($constrainOnly);
$_image->keepAspectRatio($keepAspectRatio);
$_image->keepFrame($keepFrame);
$_image->keepTransparency($keepTransparency);
$_image->resize($width, $height);
$_image->save($cache_dir . $_file_name);
return Mage::getBaseUrl('media') . $cache_path . $_file_name;
}
}
【问题讨论】:
标签: php magento caching resize