टीएल; डीआर: निचले हिस्से में सही पर्यवेक्षक कोड।
उत्तर देने से पहले एक नोट: सुनिश्चित करें कि पर्यवेक्षक ट्रिगर किया जा रहा है; अपने कोड के माध्यम से कदम या die('here');
का उपयोग करें। लिखे गए अनुसार, आपके उदाहरण विधि में ईवेंट पर्यवेक्षक डेटा (एक तर्क गुम होने) प्राप्त करने के लिए सही प्रोटोटाइप नहीं है।
रीडायरेक्ट तर्क के लिए एक ईवेंट पर्यवेक्षक का उपयोग करना इस संदर्भ में पूरी तरह से उपयुक्त है, जैसा मूल टीम द्वारा स्पष्ट रूप से पर्यवेक्षक को अनुरोध और प्रतिक्रिया वस्तुओं को पारित करने के द्वारा स्पष्ट किया गया है। आपका प्रयास अच्छा है, लेकिन मुझे लगता है कि आप की स्थिति और विन्यास जिसके कारण निष्पादन Mage_Checkout_CartController::_goBack()
पर भेजने की है, विशेष रूप से लाइन
$this->_redirect('checkout/cart');
इसलिए हम अपने दृष्टिकोण को संशोधित करने की जरूरत है। अब, आप प्रतिक्रिया जोड़ तोड़ और नीचे बताया गया है के रूप में सामने नियंत्रक sendResponse()
विधि को फोन करके अपने घटना पर्यवेक्षक के बाद प्रसंस्करण से किसी भी अनुरोध/प्रतिक्रिया तर्क रोका जा सकता है (nb ऐसा नहीं!):
public function moduleMethod($observer) //note I added a param
{
/* @var $response1 Mage_Core_Controller_Response_Http */
$response1 = $observer->getResponse(); // observers have event args
$url = 'http://www.example.com/';
$response1->setRedirect($url);
/* SHOULDN'T DO THIS */
Mage::app()->getFrontController()->sendResponse();
}
यह काम करना चाहिए, लेकिन मुझे लगता है कि यह एक ईथरियल सिस्टम घटक (ईडीए) से आउटपुट ट्रिगर करके चिंता के क्षेत्रों को मिश्रित करता है। चलिए देखते हैं कि कमांड-कंट्रोल स्ट्रक्चर में कुछ है जो हम उपयोग कर सकते हैं ...
checkout_cart_add_product_complete
ईवेंट निष्पादन कार्ट नियंत्रक की _goBack() विधि पर आता है। इस विधि नाम के साथ समस्या यह है कि यह तुलना में इसके नाम का तात्पर्य अधिक करता है:
/**
* Set back redirect url to response
*
* @return Mage_Checkout_CartController
*/
protected function _goBack()
{
$returnUrl = $this->getRequest()->getParam('return_url');
if ($returnUrl) {
// clear layout messages in case of external url redirect
if ($this->_isUrlInternal($returnUrl)) {
$this->_getSession()->getMessages(true);
}
$this->getResponse()->setRedirect($returnUrl);
}
//...
}
ऐसा लगता है कि हम सिर्फ अनुरोध वस्तु पर एक return_url
परम सेट और पूरा हम क्या जरूरत है सकते हैं।
public function moduleMethod(Varien_Event_Observer $observer)
{
$observer->getRequest()->setParam('return_url','http://www.google.com/');
}
मैंने इसका परीक्षण किया है, और यह चाल चलनी चाहिए!
बहुत धन्यवाद, इस उत्तर में आपके भयानक विवरण के लिए, जो पूरी तरह से काम कर रहे हैं! हां, मैंने विधि परिभाषा में तर्क का जिक्र करना याद कर दिया है, इसलिए मुझे सही करने के लिए धन्यवाद। यह महान होगा यदि आप ईडीए और Magento पर अपने पेशेवरों और विपक्ष पर अधिक कह सकते हैं, कृपया! –
Magento में कई परतों को घुमाने वाला गहरा कॉल स्टैक है। अपने कार्यक्रम वास्तुकला के बिना, कई अनुकूलन निषिद्ध रूप से आक्रामक होगा और बहुत सारी कठोरता का कारण बन जाएगा। – benmarks
बड़ी मदद, धन्यवाद !! –