2012-05-31 3 views
1

Я думаю, что это очень простой вопрос, но, учитывая мой уровень программирования, это не так просто для меня.Предотвращение срабатывания наблюдателя в Magento

Мне интересно, есть ли способ остановить или не вызвать наблюдателя после какого-либо события, потому что наблюдатель, которого я делаю, находится в бесконечном цикле, и я хочу остановить его от выполнения этого цикла.

Надеюсь, что мой вопрос достаточно ясен.

Благодаря

UPDATE: Примером может быть: Наблюдатель спусков в случае: core_config_data_save_after и когда наблюдатель начала требуется обновить значение в core_config_data таблице, но при сохранении это наблюдатель начал снова, и есть петля

+0

КАКАЯ события и наблюдателя вы говорите, в каком контексте? Можете ли вы привести пример? –

+0

@Pekka наблюдатель является триггером в событии: core_config_data_save_after и предположим, что когда этот наблюдатель запущен, вы хотите обновить значение в таблице core_config_data, но когда вы его сохраните, наблюдатель снова запустится и появится цикл – apz2000

+0

Что вы пытаюсь выполнить, я предполагаю запустить какой-то пользовательский код, который также вносит изменения в 'core_config_data table' после завершения? – B00MER

ответ

7

Одно из возможных решений было бы использовать реестра и установить флаг - вы просто возвращаетесь от своего наблюдателя, если флаг реестра установить на любые будущие хиты.

т.е.

public function myObserver(Varien_Event_Observer $observer) 
{ 
    if (Mage::registry('my_observer_has_run')) { 
     return $this; 
    } 

    .... Your Code Here .... 

    Mage::register('my_observer_has_run', true); 
} 
+0

Привет @Drew Я, хотя, чтобы это сделать, но в некоторых случаях мне нужно запустить его дважды, потому что иногда он сначала сохраняется, а затем обновляется. Поэтому иногда нужно запускать дважды. Но я думаю, что могу понять это, если у вас есть другая идея, которая может быть полезна. Спасибо – apz2000

+0

Итак, какое именно условие вы проверяете, чтобы знать, как запустить код один раз, два раза и т. Д.? Есть ли значение атрибута на вашей модели, которое вы проверяете? –

+0

У меня вопрос с Mage :: resgister, и я надеюсь, что вы ответите на это, если я создам какой-то реестр, например ваш пример, если этот реестр уже существует, Magento генерирует исключение или что-то в этом роде? – apz2000

4

Вы должны быть в состоянии определить местонахождение наблюдателя ваше желание и установить <type>disabled</type>

<frontend> 
<events> 
     <controller_action_predispatch> 
      <observers> 
       <log> 
        <class>log/visitor</class> 
        <method>initByRequest</method> 
       </log> 
      </observers> 
     </controller_action_predispatch> 
     .... other events 
    </events> 

локально модифицированный XML, чтобы отключить выше найденный наблюдатель:

<frontend> 
    <events> 
     <controller_action_predispatch> 
      <observers><log><type>disabled</type></log></observers> 
     </controller_action_predispatch> 
    </events> 
</frontend> 

и код и более подробную информацию:

+0

Я не хочу отключать его так, я хочу, чтобы событие отправлено хотя бы один раз. Можете ли вы снова прочитать мой вопрос? Я обновил его. – apz2000

Смежные вопросы