Magento从同名的Url调整图像大小

时间:2014-07-29 15:40:37

标签: php magento caching resize

我有一个基于Tim Bezhashvyly帖子的函数,关于调整Magento中url的图像大小。我的问题在于缓存以及当有人更改具有相同名称的图像时。

示例:我有供应商徽标,名称为:mylogo.png。如果我想用不同的徽标更改此徽标但名称相同:mylogo.png徽标的前端版本不会更改,因为该功能检查是否有mylogo.png的缓存版本并且有一个显示旧的。

上传的徽标不是由我而是由供应商完成的,我不能阻止他命名所有他的logo version logo.png。我需要一种智能方法来更改缓存系统。每次加载前端页面时都会调用此函数,这就是为什么我需要缓存图像的原因我不想在页面加载时重新调整evreytime。

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

1 个答案:

答案 0 :(得分:0)

您可以尝试不同的方法:在上传新图像时清除该特定图像的缓存。因此,下次您的前端帮助程序尝试输出图像时,将生成一个新的缓存图像。

注意:如果对缓存的图像使用相同的URL,即使上传了新的图像,也请考虑处理浏览器缓存,否则,根据原始图像的校验和生成缓存图像的名称。

修改

一个好的做法是使用实​​体名称生成图像名称,在本例中为品牌名称。

  1. 以描述性和简明的英文命名您的图像
  2. 在搜索引擎优化方面,使用可接受的关键字帮助您的网页在搜索引擎上排名非常重要。创建描述性,关键字丰富的文件名对于图像优化至关重要。搜索引擎不仅会抓取您网页上的文字,还会搜索图片文件名中的关键字。

    来自:shopfiy

    如果清除缓存太麻烦,你可以附加新文件校验和的前4个字母:

    <?php 
    
        $fileName = sprintf("%s-%s.%s",
            convert_text_to_friendly_url_function($brandName),
            substr(md5_file($newUploadedFile), 0, 4).
            $fileExtension
        );
    
        // now you have a new fileName, do whatever you need with it.
    ?>