我想知道一种可靠的方法来浏览产品的图库图像,并通过检查它们是否相同来取出基本图像。
我正在自定义产品页面的媒体模板(catalog/product/view/media.phtml
),我想将所有图库图像与基本图像放在图像选择器中,而基本图像不会显示两次(如果在后端没有“排除”,就会发生这种情况。)
我从原始模板中了解到,图库图像显示如下:
<?php foreach ($this->getMediaGallery() as $_image): ?>
<img src="<?php echo $this->helper('catalog/image')->init($this->getProduct(), 'thumbnail', $_image->getFile()) ?>" />
<?php endforeach; ?>
,产品的基本图像显示如下:
<img src="<?php echo $this->helper('catalog/image')->init($_product, 'image') ?>" />
我研究了媒体库的起源,发现它是一个Varien_Object
的数组,它们都有一个所谓的“价值ID”,用于识别图库图像。我不知道这个ID的范围是什么,以及它的用处。产品的基本映像作为Mage_Product_Helper_Image
返回,通过它我似乎无法获得任何ID或ID类属性(甚至不通过产品映像模型,我通过重写帮助程序类公开)
我也尝试按文件名匹配它们。它工作了几天,因为图库图像'存储在Varien_Object(file
)的一个属性中,产生了这样的东西:
/8/2/8280.jpg
帮助程序类的__toString()
方法首先以上面的格式返回文件名,但过了一段时间它开始返回缓存图像的URL:
http://domain.com/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/8/2/8280.jpg
不可靠。
如果有人知道更好的方法来检索产品的图像,同时知道哪一个是基本图像,能够阻止同一图像显示两次,那么请告诉我。
编辑:
澄清:
假设产品X有5个相关图像,方便地称为:
图库图像集合将包括未从图库中明确“排除”的所有图像。在我们的示例中,图库图像集合将包括:B,T,N和P.这些是我想要在图像选择器中显示的图像,但是我总是想要包含基本图像,无论它是否可以从图库中排除。
如果我无法将图库图像与基本图像进行比较,我会得到这样的结果:B,T,N,P,B。基本图像显示两次。
有两种方法可以防止这种情况发生:
我的猜测是,解决方案在于通过ID或类似ID的属性将图像相互比较。
答案 0 :(得分:1)
我需要做类似的事情,最后这样做。
首先,在初始图像(不在图库foreach循环内)之前添加以下内容:
$base = basename($_product->getData('image'))
然后,在foreach循环中立即添加:
$image = basename($this->helper('catalog/image')->init($this->getProduct(), 'thumbnail', $_image->getFile()))
然后将新图像放在另一个foreach循环中:
if ($base != $image):
这会比较图像名称,而不包括其余的网址。
答案 1 :(得分:0)
我的解决方案是搜索图片名称。我有同样的问题,因为我想在拇指图像周围绘制一个边框,并显示当时选中的边框。因此,对于产品图片名称:
<?php $product_image_name = substr($image_url, strrpos($image_url, '/') + 1); ?>
然后,对于图库中的每个图像:
foreach ($this->getGalleryImages() as $_image){
$image_name = substr($_image->getUrl(), strrpos($_image->getUrl(), '/') + 1);
if ($product_image_name == $image_name) // Do stuff here
}
希望这有帮助。