Обновление: хотя я согласен с тем, что установка флага no-dispatch является «наилучшим» вариантом, могут быть некоторые случаи, когда «правильный» вариант - просто выйти (). Я опробовал код Джонатана, который превосходен, но он выявил тот факт, что у меня есть несколько других наблюдателей, которые запускаются сразу после этого, и я НЕ ХОЧУ ЗАПУСТИТЬСЯ в случае, если эта функция наблюдателя возвращает выходные данные (в основном возвращая сообщение об ошибке) Код Джонатана - лучший ответ здесь для 95% + всех сценариев, но я предполагаю, что мораль этой истории в том, что вам просто нужно знать свой код, чтобы знать, является ли он правильным ответом для вашей ситуации.

я есть некоторый код в кассе, где я устанавливаю ключ в сеансе, если этот ключ установлен в значение false в любом месте кассы, мне нужно отправить их обратно на страницу оплаты. У меня есть код для него, но у меня также не может быть никакого кода, который обычно запускается после наблюдателя, потому что он вызовет стороннюю службу и вернется как неправильный из-за этого ключа, который отсутствует в сеансе

Вот мой код, у меня есть все, что я хочу, но мне нужно, чтобы ответ происходил немедленно и даром после отправки строки события запускался только ответ, отправленный обратно в браузер.

public function checkForOrdKey(Varien_Event_Observer $observer)
    {
        $controllerAction = $observer->getControllerAction();
        $request = $controllerAction->getRequest();
        $controllerName = $request->getControllerName();
        $stepData = $this->_getCheckoutSession()->getStepData();
        $ordKeyRemoved = $this->_getCheckoutSession()->getOrdKeyRemoved();
        // if it is the checkout onepage controller or inventory controller don't do anything
        if (isset($controllerName) && $controllerName === "onepage" && $stepData['shipping']['complete'] && $ordKeyRemoved) {
            $this->_getCheckoutSession()->setStepData('shipping', 'complete', false);
            $result['goto_section'] = 'billing';
            Mage::app()->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
            $this->_getCheckoutSession()->setOrdKeyRemoved(false);

        }
    }

Ответы на вопрос(1)

Ваш ответ на вопрос