События изменения статуса заказа Magento - PullRequest
4 голосов
/ 15 июня 2010

Я хочу изменить через веб-сервис удаленную инвентаризацию, я знаю, что с помощью Event Observer Method может вызвать мой код, но я не знаю, какое событие полезно для выполнения моей задачи, например on_order_complete, есть ли обновленный список события или дополнительная документация?

Ответы [ 4 ]

16 голосов
/ 03 марта 2011

Если вы хотите отправить событие, когда состояние заказа меняется на какое-либо состояние или состояние, вам нужно будет вставить свой собственный прослушиватель событий.Это не так сложно, как кажется.

Просто переопределите функцию _setStatus в Mage_Sales_Model_Order вот так ...

/**
 * Order model
 *
 * @category    WMG
 * @package     WMG_Sales
 * @author      Lee Bolding <lee.bolding@wmg.com>
 *
 *  Supported events:
 *  sales_order_status_before
 *  sales_order_status_after
 *
 * NOTE: Unfortunately, we can't override setState() as the protected _setState()
 * function is used by the registerCancellation() and _checkState() functions
 *  
 */
class WMG_Sales_Model_Order extends Mage_Sales_Model_Order
{
    /**
     * Order state protected setter.
     * By default allows to set any state. Can also update status to default or specified value
     * Сomplete and closed states are encapsulated intentionally, see the _checkState()
     *
     * @param string $state
     * @param string|bool $status
     * @param string $comment
     * @param bool $isCustomerNotified
     * @param $shouldProtectState
     * @return Mage_Sales_Model_Order
     */
    protected function _setState($state, $status = false, $comment = '', $isCustomerNotified = null, $shouldProtectState = false)
    {
        // dispatch an event before we attempt to do anything
        Mage::dispatchEvent('sales_order_status_before', array('order' => $this, 'state' => $state, 'status' => $status, 'comment' => $comment, 'isCustomerNotified' => $isCustomerNotified, 'shouldProtectState' => $shouldProtectState));

        // attempt to set the specified state
        if ($shouldProtectState) {
            if ($this->isStateProtected($state)) {
                Mage::throwException(Mage::helper('sales')->__('The Order State "%s" must not be set manually.', $state));
            }
        }
        $this->setData('state', $state);

        // add status history
        if ($status) {
            if ($status === true) {
                $status = $this->getConfig()->getStateDefaultStatus($state);
            }
            $this->setStatus($status);
            $history = $this->addStatusHistoryComment($comment, false); // no sense to set $status again
            $history->setIsCustomerNotified($isCustomerNotified); // for backwards compatibility
        }

        // dispatch an event after status has changed
        Mage::dispatchEvent('sales_order_status_after', array('order' => $this, 'state' => $state, 'status' => $status, 'comment' => $comment, 'isCustomerNotified' => $isCustomerNotified, 'shouldProtectState' => $shouldProtectState));

        return $this;
    }
}

Теперь вы можете подписать наблюдателей на недавно созданные sales_order_status_before и sales_order_status_after события

2 голосов
/ 29 июня 2013

Я думаю, что лучшее решение - следить за изменениями без переписывания:

http://www.cartware.de/blog/detail/article/kein-magento-event-fuer-statusaenderung/

Читая код, вы можете получить ключ даже к его написанию на немецком языке ...

1 голос
/ 15 июня 2010

Я написал в блоге об этом (который содержит полный список событий для Magento CE 1.4) несколько недель назад.

События, которые могут заинтересовать вас при размещении заказа:sales_order_place_after, который вызывается после размещения заказа (серьезно!).

Надеюсь, это поможет!

Спасибо, Джо

0 голосов
/ 15 июня 2010

Используйте grep, чтобы найти список событий, это должно быть что-то вроде

grep -rn -A2 --include="*.php" dispatchEvent /var/www/magento/

или что-то в этом роде ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...