【问题标题】:Get base product image in Magento在 Magento 中获取基本产品图像
【发布时间】:2012-08-13 06:39:18
【问题描述】:

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

不幸的是:

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);

【问题讨论】:

  • 欢迎来到 Stack Overflow。这绝对是OK to self-answer您自己的问题,但请将其作为实际答案发布,而不是在问题本身中发布。这允许对答案进行投票/接受,并帮助我们保持“未回答”列表更加清晰。

标签: php image magento shopping-cart


【解决方案1】:

试试:

$this->helper('catalog/image')->init($_product, 'image')->keepFrame(false)
->constrainOnly(true)->resize(38,38);

【讨论】:

    【解决方案2】:

    我想你正在寻找这个:

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

    应归功于BenMarks,谁提供了这个answer。

    【讨论】:

    • $product->getImage() 返回null。带有小型和缩略图的作品。 Mage_Checkout_Block_Cart_Sidebar 中的调用是否重要?
    • 如果您的购物车中有 $item 作为产品,请先尝试:$product=Mage::getModel('category/product')->load($item->getId()); echo Mage::getModel('catalog/product_media_config') ->getMediaUrl( $product->getImage() );
    • Jerzy,几乎 :) $_product = Mage::getModel('catalog/product')->load($_item->getProduct()->getId()); 最后它按预期工作。 Dzięki。
    • 如果您只有图像 URL,这很好。但据我所知,您无法将其调整为您想要的任何大小:(
    【解决方案3】:

    小图和缩略图效果很好。

    然后试试 small_image 而不是 image,像这样:

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

    【讨论】:

    • 但我想获取基本图像,而不是 small_image。这对我很重要。
    • @marco 在下面看到我的回答
    【解决方案4】:

    注意!

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

    是对象,不是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;
    }
    

    【讨论】:

    • 非常感谢!帮了我很多。而不是添加 . '' 我将其转换为(字符串)。不确定这是否是最佳做法。
    • 我想更明显的转换为字符串可能会更清楚一些 - $images[] = $images_obj.'' >>> $images[] = (string)$images_obj;跨度>
    【解决方案5】:
    <img src='.$this->helper('catalog/image')->init($product, 'small_image')->resize(225, 225).' width=\'225\' height=\'225\'/>
    

    【讨论】:

      【解决方案6】:

      Magento 产品图片分配给变量

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

      Magento 产品图像分配给对象

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

      它对我有用....

      【讨论】:

      • 将它附加到一个字符串有点模棱两可,最好是对它进行类型转换。 $product_image = (string) Mage::helper('catalog/image')-&gt;init($productmodel,'small_image')-&gt;keepFrame(true)-&gt;resize(width,height);
      • @Ben 我在末尾添加了.'',现在检查我的答案。
      【解决方案7】:

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

      TLDR;

      UPDATE catalog_eav_attribute SET used_in_product_listing = 1 WHERE attribute_id = 106;
      

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

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

      $_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 设置脚本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-29
        • 1970-01-01
        • 1970-01-01
        • 2011-12-14
        • 2022-11-11
        • 1970-01-01
        • 1970-01-01
        • 2013-12-11
        相关资源
        最近更新 更多