2

我已按照此答案在类别列表页面上隐藏没有图像的产品。它工作了一段时间。

现在,由于某种原因,似乎没有图像的产品仍然显示在列表页面上。关于为什么会发生这种情况的任何想法?

注意: 正在使用相同的 list.phtml 页面。

谢谢你。

4

3 回答 3

4

将以下内容添加到 list.phtm:

//$_productCollection=$this->getLoadedProductCollection();
$_productCollection = clone $this->getLoadedProductCollection();
$_productCollection->clear()
                   ->addAttributeToFilter('small_image', array('neq' => 'no_selection'))
                   ->load();

这个答案推荐了以下内容:

->addAttributeToFilter('image', array('neq' => 'no_selection'))

而我已将其设置为:

->addAttributeToFilter('small_image', array('neq' => 'no_selection'))

上一个答案不起作用的原因是因为产品集合没有加载常规图像,因此无法将常规图像添加​​为过滤的属性,所以我将small_image添加为过滤的属性。

您还可以尝试RS 的答案,他将图像添加到页面并因此添加到集合中。您可能还必须使用以下方法添加所有属性:

->addAttributeToSelect('*')
于 2013-01-10T03:02:36.240 回答
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(图像不存在)

于 2013-01-09T19:31:28.093 回答
2

我认为问题在于您正在尝试获取 list.phtml 上的“图像”(基本图像)属性(默认情况下,我只能访问缩略图 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>

请参阅如何在 Magento 的 list.phtml 中访问自定义图像属性

于 2013-01-09T20:43:34.517 回答