Magento - 使用config.xml在购物车中检索自定义属性LABEL

时间:2015-03-31 14:32:13

标签: magento attributes cart

我有一个自定义属性,我需要在购物车中显示。属性是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件商品,因此使用最后一种方法可以略微减慢速度。

2 个答案:

答案 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);