我创建了具有两个相关简单产品的可配置产品。当我选择其中之一并将其添加到购物车时,将显示正确的图像以及正确的价格和格式详细信息。
但是,如果我做同样的事情并将该项目添加到我的愿望清单中。将显示正确的价格和产品详细信息,但将显示可配置的产品图像,而不是所选的简单产品。
这是我到目前为止所做的代码;但是现在我的愿望清单中没有任何图像显示。我正在修改的文件是应用程序/设计/前端/自定义主题/默认/模板/愿望列表/项目/列/图像.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. 产品本身已插入到列表中。