在我的模型观察者课程中,我有:
$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教程的重点:
http://www.fontis.com.au/blog/magento/loading-large-collections
现在我想将我的功能添加到我的课程中:
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";
}
}
现在有效吗?不要这么认为:
Warning: call_user_func() expects parameter 1 to be a valid callback, function 'productCallback' not found or invalid function name app/code/core/Mage/Core/Model/Resource/Iterator.php on line 50
那么我应该把我的回调函数放在哪里呢?
该系列的工作原理也很奇怪。我只希望产品类型可配置,但是当我添加
时 ->addAttributeToFilter('type_id', array('eq' => Mage_Catalog_Model_Product_Type::CONFIGURABLE))
(或其任何变体)它没有给我一系列可配置的步行。那是为什么?
答案 0 :(得分:4)
回调productCallback
将表示全局函数,而您的函数实际上是实例方法。您还需要提供一个对象:
Mage::getSingleton('core/resource_iterator')
->walk($products->getSelect(),
array(array($this, 'productCallback')),
array('arg1' => '===='));
(它是双嵌套数组的原因是因为walk()
需要回调的列表)
此外,您的实际功能名称似乎也是拼写错误,但这可能是问题中的拼写错误,而不是程序中的错字。
<强> PS 强>
阅读教程,我注意到它说:
我使用了一个简单的回调函数的例子[...]如果你在一个类中使用这个代码并且想要使用一个类方法来代替函数,你需要更改代码