我很確定'狀態'是免費數據,它可以使用訂單實例上的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中,但是它不會執行任何操作,因爲狀態不僅需要一個操作而不僅僅是設置一個標誌,這就是爲什麼你需要添加自定義邏輯。如果您的自定義狀態爲「激活」,則您需要添加邏輯關於如果「激活」訂單被「取消」時要做什麼(例如,發送通知給貝寶以停止定期付款)。 –
您能否給予任何類型的提示如何添加自定義狀態的邏輯? –