(Ничто из этого не является проверенным кодом, но концепции должны привести вас туда, куда вам нужно идти)
Magento - это проект, осуществляемый группой разработчиков программного обеспечения.Когда вы работаете с группой инженеров-программистов, документация - это код.
т.е. всякий раз, когда вам нужно сделать что-то общее с Magento, наблюдайте, как основная команда сделала это, принимая во внимание, что вы должныограничьте себя наблюдателями, переопределениями и новым кодом, поскольку вы не можете обсуждать свои изменения с указанной основной командой.
Взгляните на одностраничный метод IndexAction
контроллера проверки
app/code/core/Mage/Checkout/controllers/OnepageController.php
public function indexAction()
{
if (!Mage::helper('checkout')->canOnepageCheckout()) {
Mage::getSingleton('checkout/session')->addError($this->__('The onepage checkout is disabled.'));
$this->_redirect('checkout/cart');
return;
}
...
Magento позволяет добавлять ошибки в объект сеанса, который будет обрабатываться блоком сообщений при следующем запросе.
Mage::getSingleton('checkout/session')->addError($this->__('The onepage checkout is disabled.'));
То, что обрабатывает ошибку.Далее есть перенаправление.Это происходит здесь
$this->_redirect('checkout/cart');
Поскольку вы вызываете этот код от наблюдателя, у вас не будет доступа к этому методу.Однако, если вы исследуете контроллер
/**
* Retrieve request object
*
* @return Mage_Core_Controller_Request_Http
*/
public function getRequest()
{
return $this->_request;
}
...
protected function _redirect($path, $arguments=array())
{
$this->getResponse()->setRedirect(Mage::getUrl($path, $arguments));
return $this;
}
Вы можете увидеть его с помощью объекта ответа.Magento использует глобальный объект ответа (похожий на Zend и другие веб-фреймворки) для обработки того, что отправляется обратно в браузер (т.е. перенаправления заголовков).Вы можете получить ссылку на тот же объект через
Mage::app()->getResponse()
и можете выполнить перенаправление с чем-то вроде
Mage::app()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));