2010-05-12 10 views
10

जहां तक ​​मैं कह सकता हूं, जब मैगेंटो के बाहर एक स्क्रिप्ट चलती है, तो ईवेंट को निकाल दिए जाने पर पर्यवेक्षकों को नहीं बुलाया जाता है। क्यूं कर? मैं इसे कैसे ठीक करूं?Magento: मैं बाहरी स्क्रिप्ट में काम करने के लिए पर्यवेक्षकों को कैसे प्राप्त करूं?

नीचे मूल मुद्दा है जो मुझे इस प्रश्न पर ले जाता है। मुद्दा यह है कि पर्यवेक्षक जो सूची नियम लागू करेगा कभी नहीं कहा जाता है। घटना आग लगती है, लेकिन पर्यवेक्षक इसे नहीं उठाता है।


मैं एक बाहरी स्क्रिप्ट चला रहा हूं जो एक Magento सत्र लोड करता है।

उस स्क्रिप्ट के भीतर, मैं उत्पादों को लोड कर रहा हूं और गुणों का एक समूह पकड़ रहा हूं। एक मुद्दा यह है कि getFinalPrice() उत्पाद पर लागू होने वाले कैटलॉग नियम लागू नहीं करता है।

मैं सत्र को सेट करने के लिए जो कुछ भी जानता हूं, वह कर रहा हूं, यहां तक ​​कि सामानों का एक गुच्छा जो मुझे लगता है वह अनिवार्य है। इन नियमों को लागू करने के लिए कुछ भी नहीं लगता है।

require_once "app/Mage.php"; 
umask(0); 
$app = Mage::app("default"); 

$app->getTranslator()->init('frontend'); //Probably not needed 
Mage::getSingleton('core/session', array('name'=>'frontend')); 
$session = Mage::getSingleton("customer/session"); 
$session->start(); //Probably not needed 
$session->loginById(122); 

$product = Mage::getModel('catalog/product')->load(1429); 
echo $product->getFinalPrice(); 

किसी भी अंतर्दृष्टि की सराहना की है:

यहाँ एक परीक्षण स्क्रिप्ट है।

+2

आप किस घटना में शामिल होने की कोशिश कर रहे हैं, और ईवेंट पर्यवेक्षक के लिए आपकी config.xml क्या दिखती है? –

उत्तर

11

मेरा पहला अनुमान, घटना आप हुक करने के लिए एक <frontend /> या <admin /> घटना है में प्रयास कर रहे होते है क्योंकि यह केवल <global /> घटनाओं आग की तरह लग रहा है जब आप एक कमांड लाइन स्क्रिप्ट चलाने होगा।

Magento इस अवधारणा को "क्षेत्रों" कहा जाता है। क्षेत्र अलग-अलग अनुप्रयोगों की तरह हैं जो सिस्टम में रहते हैं (लेकिन काफी नहीं, मैं अभी भी अवधारणा पर थोड़ा अस्पष्ट हूं)। जब आप अपने पर्यवेक्षकों के साथ config.xml सेट करते हैं, तो आप उन्हें <global /> में रख रहे हैं टैग, <frontend /> टैग, या <admin /> टैग।

जब घटनाओं की बात आती है, तो Magento केवल उन क्षेत्रों को लोड करता है जिन्हें इसे एक कण अनुरोध के साथ सौदा करना पड़ता है। तो, <global /> क्षेत्र हमेशा लोड हो जाता है। हालांकि, <frontend /> या <admin /> फ़ील्ड केवल तभी लोड हो जाते हैं जब एप्लिकेशन नियंत्रक प्रेषण में हो। विशेष रूप से, निम्न फ़ाइल/रेखा

File: app/code/core/Mage/Core/Controller/Varien/Action.php 
Mage::app()->loadArea($this->getLayout()->getArea()); 

जो कमांड लाइन एप्लिकेशन के साथ कभी नहीं होता है। केवल <global /> क्षेत्र लोड हो जाता है।

तो, जैसा कि पहले पैराग्राफ में बताया गया है, मेरा अनुमान है कि आपका पर्यवेक्षक फायरिंग नहीं कर रहा है क्योंकि Magento एप्लिकेशन के <frontend /> क्षेत्र को कभी लोड नहीं करता है। समाधान के लिए, आप अपने पर्यवेक्षक को <global /> क्षेत्र में ले जाने का प्रयास कर सकते हैं। आप मैन्युअल रूप से बुला

Mage::app()->loadArea(Mage_Core_Model_App_Area::AREA_FRONTEND); 

हालांकि, आप जिनमें से कई शायद एक वेब ब्राउज़र संदर्भ संभालने बनाई गई है <frontend /> क्षेत्र, में सभी पर्यवेक्षकों लोड हो रहा है होगी की कोशिश कर सकते।

यदि इनमें से कोई भी मदद नहीं करता है, तो Mage_Core_Model_App कक्षा पर dispatchEvent विधि देखें। यही वह जगह है जहां घटना पर्यवेक्षकों को बुलाया जाता है।

+1

Magento वास्तुकला में एक और ठोस सबक। धन्यवाद, एलन। – Laizer

+1

तारकीय उत्तर एलन। जानकारी के लिए धन्यवाद :) –

संबंधित मुद्दे

 संबंधित मुद्दे