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.

È stato utile?

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top