我正在开发一个模块,将一个名为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_data
和text_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));
然后创建一个合适的观察者来保存你的自定义数据。
我知道这不多,但这是一个开始。在不久的将来,我将对这篇文章进行编辑,以详细阐述。