可配置产品显示在Magento Wishlist中,而不是选定的简单产品

时间:2015-03-10 09:01:54

标签: php magento-1.9.1 configurable-product

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

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

这是我到目前为止所做的代码;但是现在我没有在我的愿望清单中显示任何图像。我正在修改的文件是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'); ?>" />

2 个答案:

答案 0 :(得分:1)

好的:我发现您的代码存在错误 - &gt;

  **$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'];

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

干杯

答案 1 :(得分:0)

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

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

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

/* @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的情况下可能覆盖Wishlist/Model/Item.php

但请注意,afaik需要在上面的代码中执行/检查更多内容,尤其是当产品最初添加到列表中时。通过列表项ID拉出单个产品可能会产生错误。产品本身已插入列表中。