Какие наблюдатели вызываются при нажатии на кнопку редактирования на корзине magento? - PullRequest
0 голосов
/ 29 августа 2018

Я создал наблюдателя, до того, как произошло событие нажатия кнопки редактирования. используя это, я мог бы изменить значение поля выбора

1 Ответ

0 голосов
/ 29 августа 2018

Чтобы наблюдатель был вызван, должны существовать две вещи: событие и $observer, который слушает это событие. Чтобы установить наблюдателя на событие просто Google, вы узнаете, как.

Если вы хотите отладить своего наблюдателя, есть два важных метода, которые вы можете посмотреть, чтобы понять, что происходит. Первый - Mage_Core_Model_App#dispatchEvent при app/code/core/Mage/Core/Model/App.php:1271

public function dispatchEvent($eventName, $args)                                
{                                     
    $eventName = strtolower($eventName);                                        
    foreach ($this->_events as $area=>$events) {                                
    // (...)

Здесь все события останавливаются на своем пути. Во время разработки вы можете проверить $eventName, установив точку останова (моя любимая), записав значение в файл, или даже испачкаться и просто echo увидеть под капотом.

public function dispatchEvent($eventName, $args)
    echo "BlaBlaBla"; // just used to find the printed lines in view source code of browser
    print_r($eventName);

    $eventName = strtolower($eventName);                                        
    foreach ($this->_events as $area=>$events) {                                
    // (...)

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

Второй метод, который фактически выполняет эту работу: Mage_Core_Model_App#_callObserverMethod при app/code/core/Mage/Core/Model/App.php:1338

/**  
 * @param object $object
 * @param string $method
 * @param Varien_Event_Observer $observer
 * @return Mage_Core_Model_App
 * @throws Mage_Core_Exception
 */
protected function _callObserverMethod($object, $method, $observer)
{    
    if (method_exists($object, $method)) {
        $object->$method($observer);
    } elseif (Mage::getIsDeveloperMode()) {
        Mage::throwException('Method "'.$method.'" is not defined in "'.get_class($object).'"');
    }    
    return $this;
} 

$object->$method($observer) вызовет метод наблюдателя для объекта, как и прежде, чем вы сможете установить точку останова, войти в файл или даже echo, чтобы увидеть, что происходит под капотом.

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

И, да ... Magento никогда не бывает простым.

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