【问题标题】:Custom Magento Order Field and the Magento Database自定义 Magento 订单字段和 Magento 数据库
【发布时间】:2011-05-09 05:21:14
【问题描述】:

好的,所以我已经成功地将自定义订单字段添加到我在 magento 中的页面布局中。我需要一个“经销商”,用户必须从中选择一个“经销商状态”,然后我使用 ajaxt 将所有经销商从该特定状态拉入另一个名为“dealerid”的字段。该字段的值实际上是我数据库中的经销商 ID。我的问题有点完整。

首先,我需要在“订单表”中添加一个字段来保存特定订单的经销商 ID,其次我需要让 magento 从表单中获取该字段并将其插入。我该如何去做这些事情?主要是,magento 将存储这个dealerid 的哪个表以及我要修改哪些文件才能真正拥有magento 访问权限并插入这个字段值?

注意:我只使用一页结帐方法。

【问题讨论】:

    标签: php database forms magento


    【解决方案1】:

    首先,熟悉magento SQL 更新机制(它在处理EAV 时有所不同——比如客户表——和常规表——比如订单)。例如,在 /YourNamespace/YourModule/sql/yourmodule_setup/mysql4-install-1.0.0.php 中创建一个包含 sql-update 脚本的模块。你应该使用类似的东西:

    $installer = $this;
    $installer->getConnection()->addColumn($installer->getTable('sales/order'), 'dealerid', 'decimal(12,4) NULL');
    

    在你的 config.xml 中:

    <global>
    (...)
           <models>
           (...)
               <yourmodule>
                   <class>Mage_Sales_Model</class>
                   <resourceModel>yourmodule_mysql4</resourceModel>
               </yourmodule>
               <yourmodule_mysql4>
                   <class>YourNamespace_Yourmodule_Model_Mysql4</class>
                   <entities>
                       <order><table>sales_order</table></order>
                   </entities>
               (...)
               </yourmodule_mysql4>
           (...) 
           </models>
           <resources>
                <yourmodule_setup>
                    <setup>
                        <module>YourNamespace_YourModule</module>
                        <class>YourNamespace_YourModule_Model_Mysql4_Setup</class>
                    </setup>
                </yourmodule_setup>
            </resources>
    (...)
    </global>
    

    记得创建自己的类:YourNamespace_YourModule_Model_Mysql4_Setup、YourNamespace_Yourmodule_Model_Mysql4。检查 app/code/core/Mage/Sales/ 它们应该是什么样子(那里没有什么特别需要,它们只需要从适当的核心类继承)。还要检查 app/code/core/Mage/Sales/sql 和 app/code/core/Mage/Sales/etc/config.xml。

    如果您想从单页结帐中获取一个字段,您必须做几件事...我不知道您真正需要用户什么(以及将在结帐的哪一部分进行) .添加输入由模板完成(在 app/design/frontend/yourskin/default/template/checkout 中编辑适当的文件)。

    要捕获正确的数据,您必须使用您自己的控制器操作(查看 app/code/core/Mage/Checkout/Controllers/OnepageController.php)重写结帐控制器以从表单中获取数据并将其存储在结帐会话。之后,您必须连接到 checkout_type_onepage_save_order_after 事件(它在 app/code/core/Mage/Checkou/Model/Type/Onepage.php 中),从您的会话中获取数据并将其放入 Order 模型中(并将其保存为课程)。它是一种标准程序,所以你不应该有问题。

    您可能还会向 sales_flat_order 添加一列(订单表的结构在 1.4.x.x 中发生了更改,所以我不确定 - 您必须做一些试验)。

    如果您想在 adminhtml 订单视图中查看它,则必须覆盖一些 Core/Adminhtml/Blocks/Sales/Order(可能还有模板)。

    这是一个复杂的过程,所以你必须自己弄清楚一些事情。这篇文章是一个大致的想法,应该如何完成。

    【讨论】:

    • 好吧,我们的商店实际上不会处理订单,所以我对 magento 做的唯一事情就是管理我们的目录。基本上,我将此自定义字段存储在 m_sales_flat_order 表下的数据库中,并且我将使用发送给分销商的“待处理”订单更新 XML 文件。
    • 老兄,你的&lt;yourmodule_mysql4&gt; 部分完全救了我的命。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多