16

我想在 Magento 中获取基本产品图像以调整其大小并显示在购物车侧边栏中。

不幸的是:

echo $this->helper('catalog/image')->init($_product, 'image')->resize(38, 38);

打印 Magento 占位符图像。

为该产品正确设置了基本图像。小图像和缩略图效果很好。

不知道发生了什么。

编辑: 解决方案:以这种方式获取完整的产品数据:

$_product = Mage::getModel('catalog/product')->load($_item->getProduct()->getId());

然后根据需要使用它:

echo $this->helper('catalog/image')->init($_product, 'image')->resize(38, 38);
4

7 回答 7

21

我想你正在寻找这个:

echo Mage::getModel('catalog/product_media_config')
        ->getMediaUrl( $product->getImage() ); //getSmallImage(), getThumbnail()

应该感谢给出这个答案的BenMarks

于 2012-08-16T20:54:14.817 回答
3

意识到!

$this->helper('catalog/image')->init($_product, 'small_image')->resize(38, 38);

object,而不是它自己的url 字符串。是的,您可以直接将其与 echo 一起使用,但不应将其分配给 var。例如,这不起作用

    $images = array();
    foreach($products as $_product){
        $images[]=$this->helper('catalog/image')->init($_product, 'small_image')
        ->resize(38, 38);
    }

在 foreach 之后,您将只保存最后一个图像 url。获得真正字符串 url 的简单方法是:

$images = array();
foreach($products as $_product){
    $images_obj = $this->helper('catalog/image')->init($_product, 'small_image')
    ->resize(38, 38);
    $images[] = (string)$images_obj;
}
于 2013-10-10T08:24:48.183 回答
3

尝试:

$this->helper('catalog/image')->init($_product, 'image')->keepFrame(false)
->constrainOnly(true)->resize(38,38);
于 2012-08-16T20:54:04.853 回答
2

发生这种情况的原因是该image属性未加载到产品列表中。通常,您可以在编辑属性时更改此设置,但您无法编辑此属性的这些设置。我认为那是因为它是股票属性。

TLDR;

UPDATE catalog_eav_attribute SET used_in_product_listing = 1 WHERE attribute_id = 106;

** 警告,在您确定实体的imageattribute_id 为106之前,您不应执行此 ^^^ 查询!catalog_product

一些答案建议使用这种方法:

$_product = Mage::getModel('catalog/product')->load($_item->getProduct()->getId());

echo $this->helper('catalog/image')->init($_product, 'image')->resize(38, 38);

你不应该这样做!这是因为您将执行完整的产品加载!这效率不高,而且很可能是在更糟糕的循环内完成的!对不起尖叫!

我通常不会容忍直接的数据库编辑,但在这种情况下,它对我来说是最简单的解决方案:

# First make sure we are using all the right IDs, who knows, I have seen some fubar'ed deployments

SELECT entity_type_id FROM eav_entity_type WHERE entity_type_code = 'catalog_product';
# 10
SELECT attribute_id FROM eav_attribute WHERE attribute_code = 'image' AND entity_type_id = 10;
# 106

# Now that we know the exact attribute_id....
UPDATE catalog_eav_attribute SET used_in_product_listing = 1 WHERE attribute_id = 106;

现在image属性数据将自动加载到产品列表页面上,然后您可以像这样访问它:

echo $this->helper('catalog/image')->init($_product, 'image');

最好的部分是您不会循环加载整个产品!永远不要那样做

** 另外,因为我知道我会让人们说这不是 Magento 方式,替代方法是创建一个模块,该模块具有运行该命令的 SQL 设置脚本。

于 2017-04-14T22:59:12.973 回答
1

小图像和缩略图效果很好。

然后尝试使用 small_image 代替 image,如下所示:

echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(38, 38);
于 2012-08-16T20:59:58.910 回答
0

Magento 产品图像分配给变量

$product_image = Mage::helper('catalog/image')->init($productmodel,'small_image')->keepFrame(true)->resize(width,height).'';

Magento 产品图像分配给对象

$products[] = Mage::helper('catalog/image')->init($productmodel,'small_image')->keepFrame(true)->resize(width,height).'';

这个对我有用....

于 2014-09-25T07:47:41.790 回答
0
<img src='.$this->helper('catalog/image')->init($product, 'small_image')->resize(225, 225).' width=\'225\' height=\'225\'/>
于 2014-04-08T13:43:11.773 回答