Problemi durante il recupero raccolta del prodotto in osservatore
-
16-10-2019 - |
Domanda
sto provando la costruzione di un piccolo modulo che ospitano un osservatore per sempre chiamato quando e evento chiamato quando viene sparato catalog_product_import_profile_after
questo è l'evento personalizzato che ho sparato con il
Mage::dispatchEvent('catalog_product_import_profile_after',array('adapter'=>$this));
nel file app/code/core/Mage/Adminhtml/controllers/System/Convert/ProfileController.php
Il mio modulo 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>
e il 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');
}
}
la posta sotto la funzione disableProducts funziona correttamente, ma io non sono in grado di ottenere la raccolta del prodotto utilizzando questo codice $collection = Mage::getModel('catalog/product')->getCollection();
qualsiasi organismo avere alcuna idea di quello che ho fatto di sbagliato punto gentilmente fuori. Grazie.
Soluzione
Una collezione sarà vuoto finché si accede ai dati al suo interno (cioè foreach
anello), oppure richiama il metodo ->load()
contro di essa. Dopo una collezione è stata caricata non è più possibile modificare il set di risultati che contiene, quindi questo approccio consente di affinare e filtrare i risultati restituiti alterando l'oggetto di selezione contenuta all'interno dell'oggetto di raccolta. Questo a sua volta modifica la corsa query sul database e quindi oggetti che troverete nella collezione una volta che è stato caricato.
Se si utilizza invece
$collection = Mage::getModel('catalog/product')->getCollection()->load();
si trova la raccolta contiene quindi i dati. Tenete a mente che dipende il negozio, la collezione catalog/product
può essere molto grande, quindi certamente non consiglierei email il suo contenuto in quanto ciò potrebbe essere un enorme quantità di dati - questo è particolarmente il caso per un negozio dal vivo. Se si sta tentando di eseguire il debug si dovrebbe utilizzare xdebug e un IDE, come NetBeans in un ambiente di sviluppo locale per ispezionare gli oggetti e il loro contenuto.
Altri suggerimenti
provare a utilizzare
$collection = $observer->getProduct();
var_dump($collection);