客户需求在Magento中实现一款Buy Together的功能,通过整合Related Product之后实现起来相当简单。然而熟悉Magento的用户都知道,如果相关产品包含自定义选项,如尺寸、颜色的话,系统会做如下提示。
Please specify the product required option(s)
在添加多个产品的时候,magento会调用cart模型中的addProductByIds()方法,该方法没有传递request_info给quote中的addProduct(),所以会出现上述提示。为了能够方便用户更快捷的下单,增强buy together的用户体验。需要给有自定义选项的产品添加一个弹出层,用于选择自定义选项。
代码相当简单,在catalog.xml文件中都可以找到圆形。
class Ruiwant_Tpcore_Helper_Data extends Mage_Core_Helper_Abstract
{
public function getProductOptionsHtml(Mage_Catalog_Model_Product $product)
{
$blockOption = Mage::app()->getLayout()->createBlock("Mage_Catalog_Block_Product_View_Options");
$blockOption->addOptionRenderer("default","catalog/product_view_options_type_default","catalog/product/view/options/type/default.phtml");
$blockOption->addOptionRenderer("text","catalog/product_view_options_type_text","catalog/product/view/options/type/text.phtml");
$blockOption->addOptionRenderer("file","catalog/product_view_options_type_file","catalog/product/view/options/type/file.phtml");
$blockOption->addOptionRenderer("select","catalog/product_view_options_type_select","catalog/product/view/options/type/select.phtml");
$blockOption->addOptionRenderer("date","catalog/product_view_options_type_date","catalog/product/view/options/type/date.phtml") ;
$blockOptionsHtml = null;
if($product->getTypeId()=="simple"||$product->getTypeId()=="virtual"||$product->getTypeId()=="configurable")
{
$blockOption->setProduct($product);
if($product->getOptions())
{
foreach ($product->getOptions() as $o)
{
$blockOptionsHtml .= $blockOption->getOptionHtml($o);
};
}
}
return $blockOptionsHtml;
}
}
上边的getProductOptionsHtml()方法位于tpcore/data助手类中,参数为产品对象。通过如下方式,可以在模板中调用。
1
echo Mage::helper("tpcore")->getProductOptionsHtml(Mage::getModel("catalog/product")->load($_item->getId()));
(责任编辑:最模板) |