栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Magento-基于用户输入的报价/订购产品项属性

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Magento-基于用户输入的报价/订购产品项属性

Magento提供了添加非产品属性或产品自定义选项的选项的功能。它们设置在产品上,并使用选项代码报价项目

additional_options

您需要执行两个步骤,每个步骤都可以通过事件观察器进行处理。如果您希望其他选项能够进行重新排序,则还需要注意第三件事。

添加报价项目选项

第一步是添加事件观察器,以便在将已加载产品添加到购物车之前在其上设置其他选项。一种选择是使用

catalog_product_load_after
事件。

<catalog_product_load_after>    <observers>        <extra_options> <type>model</type> <class>extra_options/observer</class> <method>catalogProductLoadAfter</method>        </extra_options>    </observers></catalog_product_load_after>

在事件观察器中,您可以添加其他检查,所请求的页面的确是“添加到购物车”操作。该观察器方法的重点是将特殊选项的选择添加到

additional_options
产品模型上的选项。

public function catalogProductLoadAfter(Varien_Event_Observer $observer){    // set the additional options on the product    $action = Mage::app()->getFrontController()->getAction();    if ($action->getFullActionName() == 'checkout_cart_add')    {        // assuming you are posting your custom form values in an array called extra_options...        if ($options = $action->getRequest()->getParam('extra_options'))        { $product = $observer->getProduct(); // add to the additional options array $additionalOptions = array(); if ($additionalOption = $product->getCustomOption('additional_options')) {     $additionalOptions = (array) unserialize($additionalOption->getValue()); } foreach ($options as $key => $value) {     $additionalOptions[] = array(         'label' => $key,         'value' => $value,     ); } // add the additional options array with the option pre additional_options $observer->getProduct()     ->addCustomOption('additional_options', serialize($additionalOptions));        }    }}

其他选项将自动从产品移至报价项目。有了这个观察者,您的选择就会出现在购物车和结帐评论中。

为订单项添加选项

为了使它们持久存在,需要一个额外的观察者(仅从Magento 1.5开始)。

<sales_convert_quote_item_to_order_item>    <observers>        <extra_options> <type>model</type> <class>extra_options/observer</class> <method>salesConvertQuoteItemToOrderItem</method>        </extra_options>    </observers></sales_convert_quote_item_to_order_item>

在这里,我们将选项从报价项目移动到订单项目。

public function salesConvertQuoteItemToOrderItem(Varien_Event_Observer $observer){    $quoteItem = $observer->getItem();    if ($additionalOptions = $quoteItem->getOptionByCode('additional_options')) {        $orderItem = $observer->getOrderItem();        $options = $orderItem->getProductOptions();        $options['additional_options'] = unserialize($additionalOptions->getValue());        $orderItem->setProductOptions($options);    }}

从这一点开始,其他选项将在前端和订单电子邮件的客户订单历史记录以及管理界面订单视图,发票,货件,贷项凭证和PDF中可见。

添加对重新订购的支持

为了在重新订购期间将Oprion转移到新订单,您需要注意将其复制。这是使用该

checkout_cart_product_add_after
事件的一种可能性。

<checkout_cart_product_add_after>    <observers>        <extra_options> <type>singleton</type> <class>extra_options/observer</class> <method>checkoutCartProductAddAfter</method>        </extra_options>    </observers></checkout_cart_product_add_after>

应该将附加选项的解析和构建附加选项数组移到一个单独的函数中,以避免代码重复,但是对于本示例,为了清楚起见,我将每种方法所需的逻辑保留在原处。

public function checkoutCartProductAddAfter(Varien_Event_Observer $observer){    $action = Mage::app()->getFrontController()->getAction();    if ($action->getFullActionName() == 'sales_order_reorder')    {        $item = $observer->getQuoteItem();        $buyInfo = $item->getBuyRequest();        if ($options = $buyInfo->getExtraOptions())        { $additionalOptions = array(); if ($additionalOption = $item->getOptionByCode('additional_options')) {     $additionalOptions = (array) unserialize($additionalOption->getValue()); } foreach ($options as $key => $value) {     $additionalOptions[] = array(         'label' => $key,         'value' => $value,     ); } $item->addOption(array(     'pre' => 'additional_options',     'value' => serialize($additionalOptions) ));        }    }}

翻译:

没有转换这些选项标签或值的机制。这里有一些想法可能在这方面有用。

在quote_item_load_after事件观察器中,获取其他选项数组并设置

$option['print_value'] =$helper->__($option['value']);
。如果
print_value
设置了,Magento将使用它来渲染显示。
订单项也可以这样做。

没有a之类的东西

print_label
,但是您可以设置一个自定义索引(
label_source
也许),并使用该索引作为源即时设置标签,例如
$option['label']= $helper->__($option['label_source']);

除此之外,您可能还不得不诉诸于修改模板(grep为

getItemOptions()
),或覆盖块类(grep
additional_options
)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/568643.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号