我应该如何在Magento中捕获与订单一起存储的自定义表单?


How should I go about capturing a custom form in Magento that is stored with the order?

我正在开发一个模块,将一个名为Rental的新步骤添加到magento中的Onepage Checkout模块中。问题不在于增加一个步骤,而在于数据捕获。

我希望能够采取自定义表单,我已经创建并存储它与其余的订单信息,所以当我点击查看订单后端,它显示信息在表单作为一个单独的框。

最好我想通过创建一个独立的模块来分离关注点。

你会怎么做呢?你个人实现这一目标的策略是什么?

首先,它应该完全取决于"租赁"数据是什么。它是否适合/适合放置在产品的自定义选项中?还是需要创建一个自定义sales属性来存储数据?

如果你想要后者,你应该使用Magento Module Creator by SilkSoftware创建一个模块来实现销售属性。

还有:使用销售属性的一个很好的线程/场景:Magento:在sales/order_shipment模型上设置自定义属性

第二步是捕获表单数据——这是假设您已经创建了一个块/表单并显示在结帐页面上。我强烈建议您按照以下语义命名字段:

<input type="text" name="rental[text_data]" />
<input type="text" name="rental[text_data2]" />

其中text_datatext_data2是您想要的变量名。

订单最终通过Mage_Checkout_OnepageController中称为saveOrderAction的控制器动作或您当前用于结帐页面的任何控制器类提交/保存。不要在app/code/core/Mage/Checkout/controllers/OnepageController.php中编辑相应的PHP类文件!既然你想把它分离到另一个模块中,你应该试着重写这个控制器,这样你的自定义控制器类在你的模块中扩展了前面提到的基类(Mage_Checkout_OnepageController),应该被Magento代替使用。

一个很好的关于重写控制器的教程可以在这里找到。

你可以从这里的两个选项中选择一个:

1.),您可以复制整个saveOrderAction函数并创建例程来保存租金数据。如果您遵循我建议的命名语义,您应该能够这样检索表单数据:

<?php
// app/code/local/Namespace/Module/controllers/Checkout.php
class Namespace_Module_Checkout extends Mage_Checkout_OnepageController {
    public function saveOrderAction() {

        .....
        $this->getOnepage()->getQuote()->save();
        $rental = $this->getRequest->getParam('rental');
        $text_data = $rental['text_data'];
        $text_data = $rental['text_data2'];
        someSaveRoutine($text_data, $text_data2);
        //..or someSaveRoutine($rental);
        .....
   }
}

2.)其次,您可以用自定义事件调度

替换上面的代码
 $rental = $this->getRequest->getParam('rental');
 Mage::dispatchEvent('checkout_onepage_controller_saveorder', array('rental'=> $rental));

然后创建一个合适的观察者来保存你的自定义数据。

我知道这不多,但这是一个开始。在不久的将来,我将对这篇文章进行编辑,以详细阐述。