通过Magento属性值循环跳过第一项
这是一个ajax文件,运行以下代码:通过Magento属性值循环跳过第一项,magento,loops,attributes,foreach,Magento,Loops,Attributes,Foreach,这是一个ajax文件,运行以下代码: $model = Mage::getModel('catalog/product'); //getting product model foreach ($violins as $k => $v) { $_product = $model->load($v); //getting product object for particular product id $violinmod
$model = Mage::getModel('catalog/product'); //getting product model
foreach ($violins as $k => $v)
{
$_product = $model->load($v); //getting product object for particular product id
$violinmodel = $_product->getAttributeText('Violinmodel'); //grabbing the violinmodel attribute value
echo $violinmodel;
}
$VIVISON包含一个具有三个产品ID的数组。我的输出会回显第二个和第三个ID的属性值,但不会回显第一个ID
我一点也不明白!为什么它会完全跳过循环中的第一个ID而不回显任何内容,而回显下面的ID却没有问题
属性设置正确,无论我如何重新排列$violins数组中的ID,第一个属性值总是被跳过。我缺少什么?在Magento中迭代产品集合时,它包含的项目实际上是产品对象实例。考虑到您要完成的任务(获取一个属性),您在这里所做的工作(多次命中数据库,加载所有属性)是不必要的。尝试将属性添加到集合中以开始并在其上迭代:
$coll = Mage::getModel('catalog/product')->getCollection()
->addAttributeToSelect('Violinmodel');
//be certain that the attribute code is capitalized...
foreach ($coll as $product) {
//var_dump($product->debug()); //for example
var_dump($product->getAttributeText('Violinmodel));
}
在循环之外初始化
$model
是不安全的。您可能认为自己在内存和/或函数调用方面效率更高,但这是自找麻烦。此时正在加载Mage\u Catalog\u Model\u Product
对象,调用->load()
并不会给您一个新对象,它只是设置现有对象的数据。除此之外,当并非所有数据都被覆盖时,您将获得奇怪的行为(例如,如果ProductA具有Violinmodel属性,而ProductB没有……它将看起来像ProductA.Violinmodel==ProductB.Violinmodel)。因此,您应该始终将模型放入循环中
foreach ($violins as $k => $v) {
$_product = Mage::getModel('catalog/product')->load($v); //getting product
if ($_product->getId() == $v) { // sanity check
$violinmodel = $_product->getAttributeText('Violinmodel'); //grabbing the violinmodel attribute value
echo $violinmodel;
}
}
或者,如benmarks所建议的,通过集合加载此数据:
$_products = Mage::getModel('catalog/product')->getCollection()
->addAttributeToSelect('Violinmodel')
->addIdFilter($violins);
foreach ($_products as $_product) {
echo $_product->getAttributeText('Violinmodel'));
}