我很确定'状态'是免费数据,它可以使用订单实例上的setData选项设置为ANY值。因此,如果您编写一个可以加载订单的自定义模块,请将数据设置为新“状态”之一,并测试您所需的任何自定义逻辑。
$order = Mage::getModel('sales/order')->load(1);
$order->setData('state','myCustomState');
$order->setData('status','onCustomState');
echo $order->getState()
// Returns myCustomState
其值得铭记在我的指收/取消保护状态,所以试图用$命令 - >的setState(“my_state”)会失败的顺序,但不应该使用setData失败,这样你就可以用此方法覆盖已关闭或已取消的订单。
如果您要使用自定义模型覆盖订单模型,您可以添加自己的逻辑(如isOnCustomState()),并允许通过以id加载的方式以任何方式处理订单。
要添加“定制逻辑”您的订单,你可以做一些复制应用程序\代码\核心\法师\销售\型号\ Order.php到本地文件夹,然后您可以添加功能到该模型中,
public function isActive(){ if($this->getState() == 'active'){ return true; } else { return false; }
public function isInActive(){ if($this->getState() == 'deactivated'){ return true; } else { return false; }
public function activate(){
if(!$this->isActive()){
$this->setData('state','active');
$this->setData('status','Active Subscription');
// some custom code to start a recuring payment
return $this;
}
}
public function deactiveate(){
if(!$this->isInActive()){
$this->setData('state','deactivated');
$this->sendOrderUpdateEmail(true,'Your subscription has been deactivated.');
// some custom code to stop a recuring payment
return $this;
}
}
现在你可以加载顺序并设置启用或停用为了激发你的自定义代码上,
$order = Mage::getModel('sales/order')->load(1)->activate();
这个代码是所有未测试,只是有些事情你可以尝试的一个例子,请不要只需将此代码转储到您的模型中,并期望它完美地工作。在代码\核心\法师\销售\等\ config.xml文件中的节点销售额/订单/状态添加
<activated translate="label">
<label>Active Subscription</label>
<statuses>
<pending default="1"/>
</statuses>
<visible_on_front/>
</activated>
在这种情况下,为什么通过XML添加另一个状态不起作用? –
你应该可以将'状态'添加到magentos'sales'模块的config.xml中,但是它不会执行任何操作,因为状态不仅需要一个操作而不仅仅是设置一个标志,这就是为什么你需要添加自定义逻辑。如果您的自定义状态为“激活”,则您需要添加逻辑关于如果“激活”订单被“取消”时要做什么(例如,发送通知给贝宝以停止定期付款)。 –
您能否给予任何类型的提示如何添加自定义状态的逻辑? –