Хобрук: Ваш путь к мастерству в программировании

Наблюдатель Magento переходит в бесконечный цикл

заранее спасибо

Я создал одного наблюдателя, мне нужно установить значения атрибутов на лету с помощью наблюдателя. Пожалуйста, проверьте следующую конфигурацию и файлы наблюдателя, когда я нажимаю кнопку «Сохранить», наблюдатель переходит в бесконечный файл . я просто хочу установить значение атрибута, используя этот наблюдатель

<catalog_product_save_after>
                <observers>
                    <zaptech_save_product_data>
                        <type>singleton</type>
                        <class>upload/observer_product</class>
                        <method>saveTabData</method>
                    </zaptech_save_product_data>
                </observers>
            </catalog_product_save_after>

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

 public function saveTabData(Varien_Event_Observer $observer)
    { 

        $productModel=Mage::registry('current_product')                
                      ->setTestid('1')
                      ->setTestname('Jitendra')
                      ->save();

    }

проблема с этим кодом в том, что наблюдение идет в бесконечном цикле

пожалуйста помоги

Спасибо еще раз,

Джитендра Дхоби.

Вот ответ на мой собственный вопрос, я заменил название события с catalog_product_save_after на catalog_product_save_before..

<catalog_product_save_before>
                <observers>
                    <zaptech_save_product_data>
                        <type>singleton</type>
                        <class>upload/observer_product</class>
                        <method>saveTabData</method>
                    </zaptech_save_product_data>
                </observers>
</catalog_product_save_before>

а также удалите метод save() из файла наблюдателя, как показано ниже

public function saveTabData(Varien_Event_Observer $observer)
        { 

            $productModel=Mage::registry('current_product');                
            $productModel->setTestid('1');
            $productModel->setTestname('Jitendra');


        }

ваше здоровье!!!...

26.08.2011

  • Тот факт, что вы сохраняете продукт внутри события, вызванного после сохранения, вызывает цикл. Возможно, вы могли бы сохранить атрибут, только если он еще не установлен. Если он установлен, то не сохраняйте его снова. 26.08.2011
  • он еще не установлен, я установил его, когда событие происходит 26.08.2011
  • Да, я понимаю. Там, где вы устанавливаете атрибут, поместите вокруг него условие if (attribute not already set) { set attribute and save} else { do nothing }. Тот факт, что вы вызываете $productModel-›save() внутри вашего события, вероятно, является причиной вашего бесконечного цикла. Учитывая, что метод сохранения снова запустит ваше событие, которое снова его сохранит, что... до бесконечности 26.08.2011
  • Спасибо, Арун, я сделал это немного по-другому, я просто изменил config.xml, я отправляю ответ здесь, спасибо за ваши комментарии. 26.08.2011
  • Вы должны правильно ответить на свой вопрос и пометить его как «отвеченный», так как это полезный ответ для людей. 24.09.2013

Ответы:


1

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

public function saveTabData(Varien_Event_Observer $observer)
{
    if(Mage::registry('customUpdate')) return;
    Mage::register('customUpdate', true);

    $productModel=Mage::registry('current_product')
        ->setTestid('1')
        ->setTestname('Jitendra')
        ->save();

}
23.03.2018
Новые материалы

Учебные заметки JavaScript Object Oriented Labs
Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

Разбор строк запроса в vue.js
Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
«Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..