gpt4 book ai didi

magento - 如何在 Magento 中将报价属性转换为订单?

转载 作者:行者123 更新时间:2023-12-02 16:09:27 24 4
gpt4 key购买 nike

我花了两天的时间,我觉得我已经尝试了一切,但我仍然碰壁。

我有两个属性(module_job_id、module_channel_id),我想将它们添加到报价和订单中。我设法得到的是报价属性工作正常,我可以看到它们存储在数据库中并且可以很好地检索它们。

剩下的唯一事情就是将值从报价移动到订单。我做错了什么?

这是我的模块配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<config>

<modules>
<Company_Module>
<version>0.1.9</version>
</Company_Module>
</modules>

<global>
<fieldsets>
<sales_convert_quote>
<module_job_id>
<to_order>*</to_order>
</module_job_id>

<module_channel_id>
<to_order>*</to_order>
</module_channel_id>
</sales_convert_quote>
</fieldsets>

<resources>
<company_module>
<setup>
<module>Company_Module</module>
<class>Mage_Sales_Model_Mysql4_Setup</class>
</setup>
<connection>
<use>core_setup</use>
</connection>
</company_module>
</resources>

</global>
</config>

安装文件sql/company_module/mysql4-install-0.1.0.php:

<?php
$installer = $this;
$installer->startSetup();

$installer->getConnection()->addColumn($installer->getTable('sales/quote'), 'module_job_id',
'VARCHAR(255) NULL DEFAULT NULL');
$installer->getConnection()->addColumn($installer->getTable('sales/quote'), 'module_channel_id',
'VARCHAR(255) NULL DEFAULT NULL');

$installer->getConnection()->addColumn($installer->getTable('sales/order'), 'module_job_id',
'VARCHAR(255) NULL DEFAULT NULL');
$installer->getConnection()->addColumn($installer->getTable('sales/order'), 'module_channel_id',
'VARCHAR(255) NULL DEFAULT NULL');

$installer->addAttribute('order', 'module_job_id', array('type' => 'varchar'));
$installer->addAttribute('quote', 'module_job_id', array('type' => 'varchar'));

$installer->addAttribute('order', 'module_channel_id', array('type' => 'varchar'));
$installer->addAttribute('quote', 'module_channel_id', array('type' => 'varchar'));

$installer->endSetup();

我已在安装文件中尝试了 addAttribute 和 addColumns 的所有可能组合。结果是我在 sales_flat_quote 和 sales_flat_order 中都将这两个属性作为列。但是,eav_attribute 中没有任何属性。我不确定这样是否可以。

我尝试的另一件事是在 sales_convert_quote_to_order 观察器中显式设置订单属性值。这不起作用:

public function salesConvertQuoteToOrder($observer)
{
$order = $observer->getEvent()->getOrder();

$order->setModuleJobId('123');
$order->setModuleChannelId('456');
}

我不知道这是否重要,但这些是我系统上的实体类型(只有订单,没有报价...):

mysql> SELECT entity_type_id, entity_type_code FROM eav_entity_type;
+----------------+------------------+
| entity_type_id | entity_type_code |
+----------------+------------------+
| 3 | catalog_category |
| 4 | catalog_product |
| 7 | creditmemo |
| 1 | customer |
| 2 | customer_address |
| 6 | invoice |
| 5 | order |
| 8 | shipment |
+----------------+------------------+

此外,eav_entity 为空。我也希望这没问题。

mysql> select * from eav_entity;
Empty set (0.00 sec)

这是在 Magento 1.6.2.0 上。非常感谢!

最佳答案

在 Magento 1.6.2.0 上,订单保存在 sales_flat_order 上,报价保存在 sales_flat_quote 上。据我所知,他们不再使用 eav 结构,所以我认为没关系。您应该查看 Mage_Sales_Model_Convert_Quote 类并添加调试代码:

public function toOrder(Mage_Sales_Model_Quote $quote, $order=null)
{
if (!($order instanceof Mage_Sales_Model_Order)) {
$order = Mage::getModel('sales/order');
}
/* @var $order Mage_Sales_Model_Order */

$order->setIncrementId($quote->getReservedOrderId())
->setStoreId($quote->getStoreId())
->setQuoteId($quote->getId())
->setQuote($quote)
->setCustomer($quote->getCustomer());

Mage::helper('core')->copyFieldset('sales_convert_quote', 'to_order', $quote, $order);

Mage::dispatchEvent('sales_convert_quote_to_order', array('order'=>$order, 'quote'=>$quote));

//I add my debug code here using Mage::log, you can debug using your own method
Mage::log($order->getData());

return $order;
}

查看是否在那里设置了 module_job_id 和 module_channel_id。

关于magento - 如何在 Magento 中将报价属性转换为订单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11664275/

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