Jestem całkiem pewien, że "stan" jest wolnymi danymi, można ustawić dowolną wartość przy użyciu opcji setData w instancji zamówienia. Więc jeśli napiszesz moduł niestandardowy, który może załadować zamówienie, ustaw dane na jeden z twoich nowych "stanów" i przetestuj z dowolną niestandardową logiką, jakiej potrzebujesz.
$order = Mage::getModel('sales/order')->load(1);
$order->setData('state','myCustomState');
$order->setData('status','onCustomState');
echo $order->getState()
// Returns myCustomState
jego warto mieć w kopalni, że ZU/ODWOŁANY chronione są stany, więc próbuje użyć $ zamówienia-> setstate („my_state”) nie powiedzie się na tych porządku, ale nie powinien zawieść na setData więc można zastąpić zamknięte lub anulowane zamówienie tą metodą.
Jeśli nadpisałeś model zamówienia niestandardowym, możesz dodać własną logikę, taką jak isOnCustomState() i umożliwić obsługę zamówienia w dowolny sposób, po prostu ładując identyfikator.
Aby dodać niestandardową logikę „” do zamówienia można coś zrobić kopię aplikacji kod \ \ \ rdzenia Mage \ Sprzedaż \ model \ Order.php do lokalnego folderu, a następnie można dodać funkcje w tym modelu,
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;
}
}
teraz można załadować rozkaz i zestaw włączyć lub wyłączyć na tym, aby ogień kodu niestandardowego
$order = Mage::getModel('sales/order')->load(1)->activate();
ten kod jest wszystko niesprawdzone i tylko przykład latków można spróbować, proszę nie robić po prostu zrzuć ten kod do swojego modelu i oczekuj, że będzie działał idealnie.W kodzie \ rdzeniowych \ Mage \ Sprzedaż \ etc \ config.xml w sprzedaży węzły/zamówienia/stany dodać
<activated translate="label">
<label>Active Subscription</label>
<statuses>
<pending default="1"/>
</statuses>
<visible_on_front/>
</activated>
Czy w takim przypadku dodanie innego stanu przez XML nie działa? –
powinieneś być w stanie dodać "stany" do modułu config.xml for magentos 'sales', ale nic to nie zrobi, ponieważ stany potrzebują akcji nie tylko do ustawienia flagi, dlatego musisz dodać niestandardową logikę . jeśli twoje stany własne są "aktywne", musisz dodać logikę, co zrobić, gdy "aktywne" zamówienie zostanie "anulowane" (np. wysłać powiadomienie do systemu PayPal, aby zatrzymać powtarzalną płatność). –
Czy możesz podać jakaś podpowiedź, w jaki sposób można dodać logikę do stanu niestandardowego? –