我已按照this answer隐藏了类别列表页面上没有图片的产品。它工作了一段时间。
现在,出于某种原因,似乎没有图片的产品仍然出现在列表页面上。 关于为什么会发生这种情况的任何想法?
注意: 正在使用相同的list.phtml页面。
谢谢。
答案 0 :(得分:4)
将以下内容添加到list.phtm:
//$_productCollection=$this->getLoadedProductCollection();
$_productCollection = clone $this->getLoadedProductCollection();
$_productCollection->clear()
->addAttributeToFilter('small_image', array('neq' => 'no_selection'))
->load();
This answer建议如下:
->addAttributeToFilter('image', array('neq' => 'no_selection'))
我将其设置为:
->addAttributeToFilter('small_image', array('neq' => 'no_selection'))
之前的答案不起作用的原因是因为产品集合没有加载常规图像,因此无法将常规图像添加为要过滤的属性,因此我添加了small_image作为要过滤的属性
您还可以尝试R.S's answer将图像添加到页面中,从而将图像添加到集合中。您可能还必须使用以下方法添加所有属性:
->addAttributeToSelect('*')
答案 1 :(得分:3)
保持Magento排队有一些技巧。我学到的一件事是,Magento模型会因为许多不同的原因而改变,而且很难找出原因。有更好的方法来做到这一点(修改集合等),但它有时只是不起作用,你没有几天找出原因。
如果你想要一种确定的方法来确保你的图像存在,请使用以下代码......它可能不是'magento方式'但它有效,我在我的网站上测试了它(Magento EE 1.12)。把它放在一个函数中,或者如果你想的话直接在你的phtml中使用它!
它基本上只是确保URL存在。
$exists = false;
$entity_id = 8800;
$product = Mage::getModel('catalog/product')->load($entity_id);
$mediaUrl= Mage::getBaseUrl('media');
$imageUrl = $mediaUrl . "catalog/product" . $product->getImage();
$file_headers = @get_headers($imageUrl);
if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
$exists = false;
}
else {
$exists = true;
}
var_dump($exists);
var_dump($imageUrl);
echo '<img src="' . $imageUrl . '" />';
$ exists将为true(图像确实存在)或false(图像不存在)
答案 2 :(得分:2)
我认为问题在于你试图在list.phtml上获取'image'(基本图像)属性(默认情况下我只能访问缩略图,small_image)。
在list.phtml上(不加载像view.pthml上的完整产品资源)
echo $_product->getImage() //null
echo $_product->getThumbnail() // path/name.jpg
echo $_product->getSmallImage() // path/name.jpg
我认为您可能需要在app / design / frontend / default / yourtheme / layout / catalog.xml中添加类似的内容
<action method="addAttribute"><name>image</name></action>
请参阅How to get access to custom Image Attribute in list.phtml in Magento