Событие Magento «Обновление статуса продукта» не вызвано - PullRequest
0 голосов
/ 24 января 2012

Я работаю над расширением, которое будет получать информацию о продукте из Magento при сохранении и выполнять пользовательскую обработку продукта.

Я потратил 2 дня до сих пор, пытаясь выяснить, почему Magento не вызывает событие "catalog_product_status_update".

Просто я меняю статус продукта, перейдя в Каталог-> Управление продуктами, затем выбираю один или несколько продуктов и использую поле «Действия» над сеткой продуктов, чтобы изменить статус продукта (ов) на «отключен».

Когда я это делаю, статус продукта (ов) меняется очень хорошо, но проблема в том, что я не получаю событие для него. Вот код, который я использую:

<?xml version="1.0"?>
<config>
  <global>
    <models>
        <mage4ucustomredirect>
             <class>Mage4u_Customredirect</class>
        </mage4ucustomredirect>
    </models>
    <events>
       <catalog_product_save_after>
            <observers>
                <abc>
                    <type>singleton</type>
                    <class>Mage4u_Customredirect_Model_Observer</class>
                    <method>on_catalog_product_save_after</method>
                </abc>
            </observers>
       </catalog_product_save_after>
       <catalog_product_status_update>
            <observers>
                <abc>
                    <type>singleton</type>
                    <class>Mage4u_Customredirect_Model_Observer</class>
                    <method>on_catalog_product_status_update</method>
                </abc>
            </observers>
       </catalog_product_status_update>
    </events>
  </global>
</config>

И это наблюдатель:

class Mage4u_Customredirect_Model_Observer
{
    public function on_catalog_product_status_update(Varien_Event_Observer $observer)
    {  
        Mage::log( "on_catalog_product_status_update" );
    }

    public function on_catalog_product_save_after(Varien_Event_Observer $observer)
    {  
        Mage::log( "on_catalog_product_save_after"  );
    }
}
?>

Как ни странно, когда я пытаюсь сохранить продукт вручную, я получаю событие "on_catalog_product_save_after", которое говорит мне, что мой код работает нормально, но не работает для этого события "on_catalog_product_status_update".

Любая помощь приветствуется!

ПРИМЕЧАНИЕ: я использую Magento v1.6.2.0

Ответы [ 3 ]

0 голосов
/ 24 января 2012

Я полагаю, что ваша проблема в том, что опция состояния обновления в верхней части таблицы не использует никаких моделей для выполнения задачи, она напрямую обращается к базе данных.Если вы посмотрите на метод updateAttributes в Mage_Catalog_Model_Product_Action и Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Action соответственно, то увидите, что ни одна модель product или product_status не загружена.

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

0 голосов
/ 09 мая 2016

Этот вопрос был задан где-то в 2012 году, но в более поздних версиях Magento обновление массовых действий для сетки продуктов обрабатывается моделью catalog/product_action по методу updateAttributes:

Mage_Catalog_Model_Product_Action::updateAttributes() 

Anсобытие отправляется туда:

Mage::dispatchEvent('catalog_product_attribute_update_before', array(
    'attributes_data' => &$attrData,
    'product_ids'   => &$productIds,
    'store_id'      => &$storeId
));

attributes_data - это список значений ключей с данными, которые должны быть сохранены для product_ids в области действия store_id.В вашем обозревателе для catalog_product_attribute_update_before вы можете проверить, обновляется ли атрибут статуса:

$event = $observer->getEvent();

$attributesData = $event->getData('attributes_data');

if (! isset($attributesData['status'])) {
    // we are not updating the status
    return;
}

// do something, for example - if the product will be disabled
if ($attributesData['status'] != Mage_Catalog_Model_Product_Status::STATUS_ENABLED) {
   // api call
}

Надеюсь, это поможет всем, кто пытается перехватить массовое обновление статуса.

0 голосов
/ 24 января 2012

Ваши два наблюдателя имеют одно и то же имя "abc".Это должно быть уникальным в списке наблюдателей Magento.

Попробуйте изменить один из них на "abc1", обновите кеш, и он должен работать.

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