Probleme beim Erhalten der Produktsammlung im Beobachter
-
16-10-2019 - |
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.
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);