Frage

Ich versuche ein kleines Modul zu bauen, in dem ein Beobachter aufgerufen wird, wann und das Ereignis aufgerufen wurde, wann catalog_product_import_profile_after wird entlassen, dies ist eine benutzerdefinierte Veranstaltung, die ich mit dem entlassen habe

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

in dem app/code/core/Mage/Adminhtml/controllers/System/Convert/ProfileController.php Datei

Mein Modul config.xml ist

<?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>

und die Observer.php ist

<?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');
            }

 }

Die E -Mail unter der Funktion deaktivieren Produkte funktioniert korrekt, aber ich kann die Produktsammlung nicht mit diesem Code erhalten $collection = Mage::getModel('catalog/product')->getCollection();

Jeder Körper, der eine Vorstellung davon hat, was ich falsch gemacht habe, weisen freundlich darauf hin. Vielen Dank.

War es hilfreich?

Lösung

Eine Sammlung ist leer, bis Sie auf die Daten zugreifen (dh foreach Schleife) oder rufen Sie die an ->load() Methode dagegen. Nachdem eine Sammlung geladen wurde, können Sie das enthaltende Ergebnissatz nicht mehr bearbeiten. Mit diesem Ansatz können Sie die zurückgegebenen Ergebnisse verfeinern und filtern, indem Sie das im Sammlungsobjekt enthaltene ausgewählte Objekt ändern. Dies verändert wiederum den Abfrage, der an der Datenbank ausgeführt wird, und somit in der Sammlung, sobald sie geladen wurden.

Wenn Sie stattdessen verwenden

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

Sie finden die Sammlung und enthält dann Daten. Denken Sie daran, dass die vom Laden abhängig ist, die catalog/product Die Sammlung kann sehr groß sein, daher würde ich sicherlich nicht empfehlen, den Inhalt zu senden, da dies eine große Menge an Daten sein könnte - dies ist insbesondere für einen Live -Shop der Fall. Wenn Sie versuchen zu debuggen, sollten Sie XDEBUG und eine IDE wie NetBeans in einer lokalen Entwicklungsumgebung verwenden, um Objekte und deren Inhalt zu inspizieren.

Andere Tipps

versuchen zu benutzen

$collection = $observer->getProduct(); 
var_dump($collection);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top