Вопрос

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

Mage::dispatchEvent('catalog_product_import_profile_after',array('adapter'=>$this));

в app/code/core/Mage/Adminhtml/controllers/System/Convert/ProfileController.php файл

Мой модуль config.xml

<?xml version="1.0"?>
<config>
  <modules>
    <GWB_ClearOrphan>
      <version>0.1.0</version>
    </GWB_ClearOrphan>
  </modules>
  <global>
    <helpers>
      <clearorphan>
        <class>GWB_ClearOrphan_Helper</class>
      </clearorphan>
    </helpers>
    <models>
      <clearorphan>
        <class>GWB_ClearOrphan_Model</class>
        <resourceModel>clearorphan_mysql4</resourceModel>
      </clearorphan>
    </models>
    <events>
      <catalog_product_import_profile_after> <!-- identifier of the event we want to catch -->
        <observers>
        <catalog_product_import_profile_after_handler> <!-- identifier of the event handler -->
        <type>model</type> <!-- class method call type; valid are model, object and singleton -->
        <class>clearorphan/observer</class> <!-- observers class alias -->
        <method>disableProducts</method>  <!-- observer's method to be called -->
        <args></args> <!-- additional arguments passed to observer -->
            </catalog_product_import_profile_after_handler>
        </observers>
      </catalog_product_import_profile_after>
    </events>
  </global>
</config>

и Observer.php является

<?php
class GWB_ClearOrphan_Model_Observer
{

        public function disableProducts(Varien_Event_Observer $observer)
        {
            //mail('kapil_gupta@gowebbaby.com','sub-test','msg-test');

            try{    
                $collection = Mage::getModel('catalog/product')->getCollection();

                $pro_collection = var_dump($collection);
                mail('kapil_gupta@gowebbaby.com','collection',$pro_collection);

            }
            catch(Exception $e) {
                //Mage::log($e->getMessage(), null, 'collection.log');
            }

 }

Почта в рамках функции DisableProducts работает правильно, но я не могу получить сбор продуктов, используя этот код $collection = Mage::getModel('catalog/product')->getCollection();

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

Это было полезно?

Решение

Коллекция будет пустой, пока вы не получите доступ к данным внутри него (т.е. foreach петля), или позвоните ->load() метод против этого. После загрузки коллекции вы больше не можете редактировать набор результатов, который он содержит, поэтому этот подход позволяет уточнить и фильтровать возвращенные результаты, изменяя объект SELECT, содержащийся внутри объекта сбора. Это, в свою очередь, изменяет запуск запроса по отношению к базе данных и, таким образом, элементы, которые вы найдете в коллекции после его загрузки.

Если вы вместо этого используете

$collection = Mage::getModel('catalog/product')->getCollection()->load();

Вы найдете коллекцию, затем содержит данные. Имейте в виду, что зависит от магазина, catalog/product Коллекция может быть очень большой, поэтому я, конечно, не рекомендую по электронной почте его содержимое, так как это может быть огромным количеством данных - это особенно относится к магазину в прямом эфире. Если вы пытаетесь отладить, вы должны использовать XDEBUG и IDE, такой как NetBeans, в местной среде разработки, чтобы осмотреть объекты и их содержание.

Другие советы

попробуй использовать

$collection = $observer->getProduct(); 
var_dump($collection);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top