gpt4 book ai didi

php - 扩展 Magento 购物车

转载 作者:可可西里 更新时间:2023-11-01 13:09:33 25 4
gpt4 key购买 nike

我需要扩展 Magento 购物车以包含商店定位器的额外步骤。我知道我需要覆盖核心 OnePage Controller (Mage_Checkout_OnepageController) 和 block (Mage_Checkout_Block_Onepage),但是在跟踪额外信息方面需要做些什么(例如用户从我的自定义步骤中选择的选项)。

最佳答案

此处需要执行多个步骤才能获得完整的解决方案。

首先,创建一个新模块。使用 ModuleCreator如果你希望。

然后,写一个setup script在您的模块中将新字段添加到 Magento 的属性结构中,例如:

 $setup = new Mage_Sales_Model_Mysql4_Setup('core_setup');
$setup->startSetup();

$setup->addAttribute('quote', 'my_attribute', array('type' => 'varchar', 'visible' => false, 'required' => false));
$setup->addAttribute('order', 'my_attribute', array('type' => 'varchar', 'visible' => false, 'required' => false));
$setup->addAttribute('invoice', 'my_attribute', array('type' => 'varchar', 'visible' => false, 'required' => false));
$setup->addAttribute('creditmemo', 'my_attribute', array('type' => 'varchar', 'visible' => false, 'required' => false));

请注意使用 Mage_Sales_Model_Mysql4_Setup 将字段添加到相关的 sales_flat_quotesales_flat_order 表中。

现在,在模块的 config.xml 文件中插入以下值:

<global>

<fieldsets>
<sales_convert_quote>
<my_attribute>
<to_order>*</to_order>
</my_attribute>
</sales_convert_quote>
<sales_convert_order>
<my_attribute>
<to_cm>*</to_cm>
<to_invoice>*</to_invoice>
</my_attribute>
</sales_convert_order>
</fieldsets>

这将指示 Magento 将自定义字段的值从报价复制到订单到发票和 credit_memo 等。

然后在您的自定义 block / Controller 代码中,您将能够使用 Magento 的魔法 getter 和 setter 来保存值。

$oQuote = Mage::getSingleton('checkout/session')->getQuote();
$oQuote->setMyAttribute('some_value');
$oQuote->save();

您应该会看到保存在 sales_flat_quote 中的新列和值。然后,一旦客户完成结帐,相同的值应保存在 sales_flat_order 中。

请注意,只需将 quote 更改为 quote_item,即可将上述代码扩展为适用于 quote_itemorder_item > 等等,但是,如果您希望保存已在您的产品上设置的属性值,则需要一些额外的工作。

将一个新的 XML block 插入到您的 config.xml 中(同样在全局节点中):

   <sales>
<quote>
<item>
<product_attributes>
<my_attribute />
</product_attributes>
</item>
</quote>
</sales>

其中my_attribute是产品模型上的属性代码。这将使 my_attribute 在链接的产品上可用,因此您可以通过

访问它
$oQuoteItem->getProduct()->getMyAttribute()

无需执行完整的 Mage::getModel('catalog/product')->load($oQuoteItem->getProductId())。这样效率更高。

然后,您将需要一个观察者将值从产品对象复制到 quote_item 对象。因此,在 config.xml 中声明您的观察者:

    <events>
<sales_quote_item_set_product>
<observers>
<quoteitem_set_custom_data>
<type>singleton</type>
<class>mymodule/observer</class>
<method>setCustomDataOnQuoteItem</method>
</quoteitem_set_custom_data>
</observers>
</sales_quote_item_set_product>
<events>

然后像这样在你的观察者类中编写代码:

public function setCustomDataOnQuoteItem($oObserver){
$oProduct = $oObserver->getProduct();
$oQuoteItem = $oObserver->getQuoteItem();
foreach(array('my_attribute') as $vAttributeCode){
$oQuoteItem->setData($vAttributeCode,$oProduct->getData($vAttributeCode));
}
}

关于php - 扩展 Magento 购物车,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11093017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com