Magento:无需加载整个产品即可获得自定义属性值

093gszye  于 2022-11-12  发布在  其他
关注(0)|答案(5)|浏览(163)

现在我用这个来得到一个自定义属性值:

$_item = $this->getProduct()->getId();
$_product = $_product = Mage::getModel('catalog/product')->load($_item);  
$optionvalue = $_product->getCustomAttributeValue();
echo $optionvalue;

我想知道有没有更简单的方法来获得这个自定义值,而不需要加载整个产品?

mtb9vblg

mtb9vblg1#

这取决于你运行的Magento的版本。不同的版本有不同的功能。如果你运行的是Community Edition 1.6+,Catalog模块有一个非常好的方法 * 专为你 *!
请尝试以下操作:

$_item = $this->getProduct()->getId();
$_resource = $this->getProduct()->getResource();
$optionValue = $_resource->getAttributeRawValue($_item, 'custom_attribute_value', Mage::app()->getStore());
echo $optionvalue;

如果您感兴趣,可以深入研究Mage_Catalog_Model_Resource_Abstract,看看这个小家伙在做什么。它本质上只是一个查询(诚然,EAV往往是一个相当复杂的查询),用于检索您所请求的一个属性(或者您所请求的多个属性,因为您也可以传递数组)。

yhxst69z

yhxst69z2#

我只是想改进@JMTyler的回答,因为我发现你不需要一个真实的的产品模型来获得getResource()
因此,您可以使用产品ID和单例来完成它(如果您在循环中完成它,这样做会更好,因此您实际上不会多次创建模型)

$product_id = 10075;
$_resource = Mage::getSingleton('catalog/product')->getResource();
$optionValue = $_resource->getAttributeRawValue($product_id,  [ATTRIBUTE_ID/ATTRIBUTE_CODE], Mage::app()->getStore());
echo $optionValue;
dgjrabp2

dgjrabp23#

另一个简单的方法是将此“custom_attribute”添加到属性列表中,以便在检查报价项目中的产品数据时默认获取。
如果您已经在config.xml中创建了自定义模块,请添加以下内容。

<global>
    ...
    <sales>
        <quote>
            <item>
                <product_attributes>
                    <custom_attribute />
                </product_attributes>
            </item>
        </quote>
    </sales>
    ...
</global>
6pp0gazn

6pp0gazn4#

这可能不会提供太多性能益处(如果有的话);但是,它将只提取属性值,而不提取其他列:

$collection = Mage::getModel('catalog/product')
    ->getCollection()
    ->addAttributeToFilter('entity_id', $_item);
$collection->getSelect()
    ->reset('columns')
    ->columns(array('[custom attribute code]'));
$value = $collection->getFirstItem()
    ->getData('[custom attribute code]');

您还可以使用直接SQL,尽管除非性能是一个真实的的问题,否则我不推荐使用它:

$connection = Mage::getSingleton('core/resource')->getConnection('core_read');
$sql = <<<SQL
    SELECT `value`
    FROM catalog_product_entity_[backend type]
    WHERE entity_id = {$_item}
      AND attribute_id = [attribute ID]
SQL;
$row = $connection->fetchRow($sql);
$value = $row['value'];
5vf7fwbs

5vf7fwbs5#

如果所需的产品值基于下拉列表/source-attribute,则可以执行以下操作:

$resource = $magentoProductInstance->getResource();
    $value = $resource->getAttributeRawValue($productId, $attributeCode, Mage::app()->getStore());

    //if the value is an option id continue with this
    $optionId = $value;
    return $resource->getAttribute($attributeCode)
        ->setStoreId(Mage::app()->getStore()->getId())
        ->getSource()
        ->getOptionText($optionId);

相关问题