【问题标题】:Hide Products without images magento隐藏没有图像的产品 magento
【发布时间】:2013-01-09 18:59:57
【问题描述】:

我已关注this answer 在类别列表页面上隐藏没有图像的产品。它工作了一段时间。

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

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

谢谢。

【问题讨论】:

  • echo $product->getImage() 对带/不带图像的产品显示什么?
  • 您是否使用任何整页缓存,如果是,则清除整页缓存。
  • @R.S 它给了我一个空白的有/没有图像的产品

标签: magento php


【解决方案1】:

将以下内容添加到 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('*')

【讨论】:

    【解决方案2】:

    有一些技巧可以让 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 要么为真(图像存在)要么为假(图像不存在)

    【讨论】:

    • 我正在考虑按照这些思路做一些事情,我尝试了您的代码,并且由于某种原因 $exists 每次都返回 true ......没有图像的产品确实有占位符可以这样是什么原因?
    • 我不这么认为,如果您指的是普通的“M”magento 占位符。如果那里有任何图像,即使它没有在管理员中选中基本、小或缩略图的单选按钮,它也会存在。如果您的所有产品图片在管理员中都显示为“无图片”,则应该没有有效图片。请放一个 var_dump($imageUrl) 并告诉我它发出了什么。
    • 我编辑了上面的代码,不仅显示它的真/假,还显示 url 和应该存在的实际图像。
    • var_dump($imageUrl) 给了我 NULL(即使对于带有图像的产品!?)
    • 在上面的代码中确认 $entity_id 是您知道的没有图像的实际现有产品。 var_dump($product->debug());确保你得到一些数据。 var_dump($mediaUrl) 也是。确保所有这些都有数据。另外,请确保您正在加载产品,就像我在代码中显示的那样,即使它已加载。不要依赖产品集合中的负载以完全相同的方式运行(正如其他答案所暗示的那样,您可能会遇到这种情况)。
    【解决方案3】:

    我认为问题在于您试图获取 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>
    

    How to get access to custom Image Attribute in list.phtml in Magento

    【讨论】:

    • 我试图弄清楚如何将主图像添加到列表中来解决这个问题,在意识到你要去哪里之后,我只是将-&gt;addAttributeToFilter('image', array('neq' =&gt; 'no_selection')) 更改为-&gt;addAttributeToFilter('small_image', array('neq' =&gt; 'no_selection')),这似乎让它起作用。谢谢。
    猜你喜欢
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多