Question

Je suis en train la construction d'un petit module qui abritera un observateur pour s'appeler quand et événement appelé quand catalog_product_import_profile_after est tiré c'est l'événement personnalisé que je l'ai tiré en utilisant la balise

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

dans le fichier app/code/core/Mage/Adminhtml/controllers/System/Convert/ProfileController.php

Mon Module 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>

et le Observer.php est

<?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 poste dans la fonction disableProducts fonctionne correctement, mais je ne suis pas en mesure d'obtenir la collection de produits utilisant ce code $collection = Mage::getModel('catalog/product')->getCollection();

tout corps ayant une idée de ce que j'ai fait mal point de bien vouloir sortir. Merci.

Était-ce utile?

La solution

Une collection sera vide jusqu'à ce que vous accéder aux données à l'intérieur (à savoir boucle foreach) ou appeler la méthode ->load() contre elle. Après une collection a été chargée, vous ne pouvez plus modifier le jeu de résultats contient, cette approche permet d'affiner et de filtrer les résultats renvoyés en modifiant l'objet select contenu dans l'objet de collection. Cela modifie le tour d'exécution de la base de données requête sur et donc les éléments que vous trouverez dans la collection une fois qu'il a été chargé.

Si vous utilisez à la place

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

vous trouverez la collection contient alors des données. Gardez à l'esprit que dépendant de la boutique, la collection catalog/product peut être très grand donc je recommande certainement n'envoyer le contenu de car cela pourrait être une énorme quantité de données - ce qui est particulièrement le cas pour un magasin en direct. Si vous essayez de déboguer, vous devriez utiliser xdebug et un IDE tels que NetBeans dans un environnement de développement local pour inspecter des objets et leur contenu.

Autres conseils

essayez d'utiliser

$collection = $observer->getProduct(); 
var_dump($collection);
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top