Magento:遍历module Observer.php文件中的可配置文件集合

Magento:遍历module Observer.php文件中的可配置文件集合,magento,Magento,在我的模型观察者课程中,我有: $products = Mage::getResourceModel('catalog/product_collection') ->addAttributeToSelect('sku') ->addAttributeToSelect(array('name', 'short_description', 'description', 'price', 'image', 'status',

在我的模型观察者课程中,我有:

$products = Mage::getResourceModel('catalog/product_collection')
                ->addAttributeToSelect('sku')
                ->addAttributeToSelect(array('name', 'short_description', 'description', 'price', 'image', 'status', 'manufacturer', 'url_path'), 'inner');
然后我尝试迭代:

Mage::getSingleton('core/resource_iterator')->walk($products->getSelect(), array('productCallback'), array('arg1' => '===='));
这是Fontis教程中的抄袭:

现在我想将我的函数添加到我的类中:

private function xproductCallback($args)
{
$product = Mage::getModel('catalog/product');
$product->setData($args['row']);

  if ($product->getTypeId()=="configurable") {
    echo $args['arg1'] . "\n";
    echo $product->getSku() . ': ' . $product->getName() . "TYPE ". $product->getTypeId() ."\n";
    }
}
现在它起作用了吗?别这么想:

警告:call_user_func()要求参数1为有效回调,未找到函数“productCallback”,或者第50行的函数名app/code/core/Mage/core/Model/Resource/Iterator.php无效

那么我应该把回调函数放在哪里呢

同样奇怪的是,这个系列是如何运作的。我只希望产品类型可配置,但当我添加


->addAttributeToFilter('type_id',array('eq'=>Mage_Catalog\u Model\u Product\u type::CONFIGURABLE))
(或其任何变体)它没有给我一个可行走的可配置集合。这是为什么?

回调
productCallback
意味着一个全局函数,而您的函数实际上是一个实例方法。您还需要提供一个对象:

Mage::getSingleton('core/resource_iterator')
    ->walk($products->getSelect(),
           array(array($this, 'productCallback')),
           array('arg1' => '===='));
(它是双嵌套数组的原因是
walk()
需要回调列表)

另外,您的实际函数名似乎有误,但这可能是问题中的输入错误,而不是程序中的输入错误

PS
在阅读教程时,我注意到它说:

我使用了一个简单回调函数的示例[…],如果您在类中使用此代码,并且希望使用类方法而不是函数进行回调,则需要更改代码


回调
productCallback
意味着一个全局函数,而您的函数实际上是一个实例方法。您还需要提供一个对象:

Mage::getSingleton('core/resource_iterator')
    ->walk($products->getSelect(),
           array(array($this, 'productCallback')),
           array('arg1' => '===='));
(它是双嵌套数组的原因是
walk()
需要回调列表)

另外,您的实际函数名似乎有误,但这可能是问题中的输入错误,而不是程序中的输入错误

PS
在阅读教程时,我注意到它说:

我使用了一个简单回调函数的示例[…],如果您在类中使用此代码,并且希望使用类方法而不是函数进行回调,则需要更改代码


谢谢你的提示。奇怪的是,如果我将函数放在frontend.phtml文件中,它会拾取该函数。但我们知道这在道德上是错误的。我最终在config.xml中添加了一个事件观察器,这样我就可以在同一个observer.php代码中包含一个方法——不使用“private”函数,这样就可以是全局的了?谢谢你的提示。奇怪的是,如果我将函数放在frontend.phtml文件中,它会拾取该函数。但我们知道这在道德上是错误的。我最终在config.xml中添加了一个事件观察器,这样我就可以在同一个observer.php代码中包含一个方法——没有“private”函数,这样就可以是全局的?