【问题标题】:Configurable product is displayed in Magento Wishlist instead of the selected simple product可配置产品显示在 Magento Wishlist 中,而不是所选的简单产品
【发布时间】:2015-03-10 09:01:54
【问题描述】:

我创建了具有两个关联的简单产品的可配置产品。当我选择其中之一并将其添加到购物车时,会显示正确的图像以及正确的价格和格式详细信息。

但是,如果我做同样的事情并将该项目添加到我的愿望清单。显示了正确的价格和产品详细信息,但显示的是可配置产品图像,而不是选择的简单产品。

这是我到目前为止所做的代码;但是现在我的愿望清单中没有显示任何图像。我正在修改的文件是 app/design/frontend/customtheme/default/template/wishlist/item/column/image.phtml

<?php
$item = $this->getItem();
$product = $item->getProduct();
$item_s = Mage::getModel('wishlist/item')->loadWithOptions($item->getId(), 'simple_product')->getOptionsByCode();
$simple_product = $item_s['simple_product']->getData();
$simple_product_id = $simple_product_data['product_id'];
$simple_product_attr = Mage::getModel('catalog/product')->load($simple_product_id);
?>
<a class="product-image" href="<?php echo $this->getProductUrl($item) ?>" title="<?php echo $this->escapeHtml($product->getName()) ?>">
     <img src="<?php echo $this->helper('catalog/image')->init($simple_product_attr ,'small_image'); ?>" alt="<?php echo $this->escapeHtml($product->getName()) ?>" />
</a>

这里还有去掉多余代码的代码:

$item = $this->getItem();
$product = $item->getProduct();
$item_s = Mage::getModel('wishlist/item')
     ->loadWithOptions($item->getId(), 'simple_product')
     ->getOptionsByCode();
$simple_product = $item_s['simple_product']->getData();
$simple_product_id = $simple_product_data['product_id'];
$simple_product_attr = Mage::getModel('catalog/product')
    ->load($simple_product_id);
<img src="<?php echo $this->helper('catalog/image')
    ->init($simple_product_attr ,'small_image'); ?>" />

【问题讨论】:

    标签: php magento-1.9.1 configurable-product


    【解决方案1】:

    好的:我在您的代码中发现了一个错误 ->

      **$simple_product** = $item_s['simple_product']->getData();
        $simple_product_id = **$simple_product_data**['product_id']; 
    

    改成

        $simple_product = $item_s['simple_product']->getData();
        $simple_product_id = $simple_product['product_id'];
    

    更改后,您将能够获得您的简单产品。

    干杯

    【讨论】:

      【解决方案2】:

      我知道这是一个老问题,但让我给出我们已经实施并且最终对我们有用的解决方案。

      在这种情况下,基本问题是媒体库需要在加载图像之前进行初始化。

      所以加载图像的代码如下所示:

      /* @var Mage_Wishlist_Model_Item $item */
      $item = $this->getItem();
      $product = $item->getProduct();
      
      if ($product->getTypeId() == 'configurable') {
          // Initialize media gallery
          $mediaBackend = Mage::getModel('catalog/product_attribute_backend_media');
          $mediaGalleryAttribute = Mage::getModel('eav/config')->getAttribute(Mage::getModel('catalog/product')->getResource()->getTypeId(), 'media_gallery');
          $mediaBackend->setAttribute($mediaGalleryAttribute);
      
          // Get simple product
          $item_s = Mage::getModel('wishlist/item')
              ->loadWithOptions($item->getId(), 'simple_product')
              ->getOptionsByCode();
          $simple_product = $item_s['simple_product']->getData();
          $simple_product_id = $simple_product['product_id'];
      
          // Load the product
          $product = Mage::getModel('catalog/product')->load($simple_product_id);
      
          // Finally load the images
          $mediaBackend->afterLoad($product);
      }
      

      完成后,您可以调用并显示已在模板中完成的图像:

      echo $this->helper('catalog/image')->init($product, 'small_image')->resize(750,900);
      

      这只是我们在愿望清单的 image.phtml 模板中做的一个原型。更好的解决方案是在 Model 类中实现该代码,在愿望清单的情况下可能会覆盖 Wishlist/Model/Item.php

      但是请注意,afaik 需要在上面的代码中执行/检查更多的事情,尤其是当产品最初添加到列表中时。通过列表项 ID 拉取单个产品可能会引发错误作为 conf.产品本身被插入到列表中。

      【讨论】:

        猜你喜欢
        • 2017-10-23
        • 2013-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-07
        • 2012-08-30
        • 1970-01-01
        相关资源
        最近更新 更多