我有一个自定义属性,我需要在购物车中显示。属性是Dropdown,如下所示:
Attribute Code : section
Catalog Input Type for Store Owner : Dropdown
Options:
ID/VALUE = 67 LABEL = warehouse
ID/VALUE = 69 LABEL = showroom
ID/VALUE = 70 LABEL = stockroom
要显示这个,我有一个自定义模块和我的config.xml,如下所示:
<global>
<sales>
<quote>
<item>
<product_attributes>
<section/>
</product_attributes>
</item>
</quote>
</sales>
在购物车中我可以打电话:
$_item->getProduct()->getSection();
这将返回属性的ID / VALUE(即67),但我希望能够获得LABEL(即仓库)
我知道我可以从id获得一个标签:
$_product = Mage::getModel('catalog/product');
$attr = $_product->getResource()->getAttribute("section");
if ($attr->usesSource()) {
$_label = $attr->getSource()->getOptionText("67");
}
但我希望通过我的模块获取标签,这样我就可以删除额外的数据库查询并再次加载产品模型。我的购物车每个订单可以有超过20件商品,因此使用最后一种方法可以略微减慢速度。
答案 0 :(得分:0)
您可以使用$_item->getProduct()->getAttributeText('section')
代替,这更清晰,但我没有考虑过性能。我认为如果您在包含该属性的集合中加载产品,则每个产品/属性不需要单独的数据库调用。
答案 1 :(得分:0)
我假设您有权访问Mage_Sales_Model_Quote_Item对象。如果是这样,您可以尝试以下代码段:
$_resource = $_item->getProduct()->getResource();
$optionValue = $_resource
->getAttributeRawValue($_item->getProduct()->getId(), 'section', Mage::app()->getStore()->getId());
$optionLabel = $_resource
->getAttribute('section')
->getSource()
->getOptionText($optionValue);