我正在尝试显示与可配置产品相关的简单产品的库存状态列表。除了在数组的第一个示例中没有显示相关的属性“Size”之外,这一方法运行良好。
<?php $_helper = $this->helper('catalog/output'); ?>
<?php $_product = $this->getProduct(); ?>
<?php $instock = "Next Day"; ?>
<?php $outofstock = "4 to 7 Days"; ?>
<?php $conf = Mage::getModel('catalog/product_type_configurable')->setProduct($_product); ?>
<?php $col = $conf->getUsedProductCollection()->addAttributeToSelect('Size')->addFilterByRequiredOptions(); ?>
<ul>
<?php foreach($col as $simple_product){
$qty = intval(Mage::getModel('cataloginventory/stock_item')->loadByProduct($simple_product)->getQty());
$size = Mage::getModel('catalog/product')->load($simple_product->getId())->getAttributeText('Size');
?>
<li>
<?php
if ( $qty >= 1 )
{echo $qty, " ",$size," ",$instock;}
else
{echo $qty, " ",$size," ",$outofstock;} ?>
</li>
<?php } ?>
</ul>
结果集如下所示:
99 Next Day
99 9 Next Day
99 8.5 Next Day
99 8 Next Day
99 7.5 Next Day
0 7 4 to 7 Days
99 12 Next Day
99 11.5 Next Day
99 11 Next Day
99 10.5 Next Day
99 10 Next Day
有没有关于我错了什么以及如何显示第一个属性的建议?
4条答案
按热度按时间nom7f22z1#
解决您的问题比了解问题的原因要容易得多!但让我按正确的顺序来解决它:
1.首先,
addAttributeToSelect
和getAttributeText
实际上都使用attribute_code
,而不是attribute_value
(我相信您使用的是size,而不是Size)。1.因此,Magento第一次在
getAttributeText
中执行$product->getData('Size')
时,它返回null
。1.当你将Size传递给
getAttributeText
函数时,size代码会被替换为特定属性示例的Size。这是如何发生的?非常简单:在方法链的最深层,Magento向DB发出下一个请求:如果你有collate作为 * case-sensitive (_ci),那么不管实际的
attribute_code
是“size”,它都会得到这个值。你可以在official article和SO上阅读更多关于collate的内容。1.所以在第一个
getAttributeText('Size')
函数之后每一个连续的$product->getData('Size')
都会返回正确的值。现在回到你的脚本。除了size-Size问题,你还有一些小问题,但是处理它们会很好,让你更好地理解Magento和php:
1.首先,在循环中使用
load
函数是一个很糟糕的习惯--尤其是连续两次,尤其是对于product对象。如果你的可配置产品有很多简单的例子,你会得到不必要的内存和时间损失。最好是把你需要的所有数据都添加到你的collection
中。然后在循环中使用加载的产品。顺便说一句,您已经使用addAttributeToSelect
函数将size添加到集合中。因此,解决问题的正确方法是:1.第二个问题,我想提到,因为你在
.phtml
模板文件,它要求从你遵循Magento模板标准-为你的循环和情况使用关闭标记:qf9go6mv2#
这将在ver. www.example.com中工作1.7.0.2,你不必自己输入AttributeText,它会自动收集它们。
ix0qys7i3#
您确定在第一个产品上设置了
Size
属性吗?我已经使用shirt_size
作为我的属性测试了您的代码,结果按预期返回。qoefvg9y4#
我想显示条码属性值,如何显示条码值?谢谢您的帮助。