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



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

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

这是我到目前为止所做的代码;但是现在我的愿望清单中没有任何图像显示。我正在修改的文件是应用程序/设计/前端/自定义主题/默认/模板/愿望列表/项目/列/图像.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'); ?>" />

好的:我在你的代码上看到了一个错误 ->

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

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

干杯

我知道

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

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

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

/* @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 模板中完成的原型。更好的解决方案是在模型类中实现该代码,在愿望清单可能覆盖Wishlist/Model/Item.php的情况下。

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

最新更新