Проблемы при получении сбора продуктов в Observer
-
16-10-2019 - |
Вопрос
Я пытаюсь построить небольшой модуль, в котором находятся наблюдатель, чтобы позвонить, когда и событие позвонило, когда catalog_product_import_profile_after
уволен это индивидуальное событие, которое я выпустил, используя
Mage::dispatchEvent('catalog_product_import_profile_after',array('adapter'=>$this));
в app/code/core/Mage/Adminhtml/controllers/System/Convert/ProfileController.php
файл
Мой модуль 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>
и 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');
}
}
Почта в рамках функции DisableProducts работает правильно, но я не могу получить сбор продуктов, используя этот код $collection = Mage::getModel('catalog/product')->getCollection();
Любое тело, имеющее какое -либо представление о том, что я сделал неправильно, любезно укажите это. Спасибо.
Решение
Коллекция будет пустой, пока вы не получите доступ к данным внутри него (т.е. foreach
петля), или позвоните ->load()
метод против этого. После загрузки коллекции вы больше не можете редактировать набор результатов, который он содержит, поэтому этот подход позволяет уточнить и фильтровать возвращенные результаты, изменяя объект SELECT, содержащийся внутри объекта сбора. Это, в свою очередь, изменяет запуск запроса по отношению к базе данных и, таким образом, элементы, которые вы найдете в коллекции после его загрузки.
Если вы вместо этого используете
$collection = Mage::getModel('catalog/product')->getCollection()->load();
Вы найдете коллекцию, затем содержит данные. Имейте в виду, что зависит от магазина, catalog/product
Коллекция может быть очень большой, поэтому я, конечно, не рекомендую по электронной почте его содержимое, так как это может быть огромным количеством данных - это особенно относится к магазину в прямом эфире. Если вы пытаетесь отладить, вы должны использовать XDEBUG и IDE, такой как NetBeans, в местной среде разработки, чтобы осмотреть объекты и их содержание.
Другие советы
попробуй использовать
$collection = $observer->getProduct();
var_dump($collection);