Magento产品属性获取价值

如果我知道产品ID而无需加载整个产品,如何获得特定的产品属性值?

Mage::getResourceModel('catalog/product')->getAttributeRawValue($productId, 'attribute_code', $storeId); 

我知道的一个方法是:

 $product->getResource()->getAttribute($attribute_code) ->getFrontend()->getValue($product) 

您可以使用

 <?php echo $product->getAttributeText('attr_id') ?> 

没有加载产品模型似乎不可能获得价值。 如果你看一下文件app / code / core / Mage / Eav / Model / Entity / Attribute / Frontend / Abstract.php,你会看到方法

 public function getValue(Varien_Object $object) { $value = $object->getData($this->getAttribute()->getAttributeCode()); if (in_array($this->getConfigField('input'), array('select','boolean'))) { $valueOption = $this->getOption($value); if (!$valueOption) { $opt = new Mage_Eav_Model_Entity_Attribute_Source_Boolean(); if ($options = $opt->getAllOptions()) { foreach ($options as $option) { if ($option['value'] == $value) { $valueOption = $option['label']; } } } } $value = $valueOption; } elseif ($this->getConfigField('input')=='multiselect') { $value = $this->getOption($value); if (is_array($value)) { $value = implode(', ', $value); } } return $value; } 

正如你所看到的,这个方法需要加载对象来获取数据(第三行)。

请参阅Daniel Kocherga的回答 ,因为它在大多数情况下都适合您。

除了获取属性值的方法之外,您可能还需要获取selectmultiselect的标签。 在这种情况下,我创build了这个方法,我存储在一个帮助类:

 /** * @param int $entityId * @param int|string|array $attribute atrribute's ids or codes * @param null|int|Mage_Core_Model_Store $store * * @return bool|null|string * @throws Mage_Core_Exception */ public function getAttributeRawLabel($entityId, $attribute, $store=null) { if (!$store) { $store = Mage::app()->getStore(); } $value = (string)Mage::getResourceModel('catalog/product')->getAttributeRawValue($entityId, $attribute, $store); if (!empty($value)) { return Mage::getModel('catalog/product')->getResource()->getAttribute($attribute)->getSource()->getOptionText($value); } return null; } 

首先我们必须确保所需的属性被加载,然后输出。 用这个:

 $product = Mage::getModel('catalog/product')->load('<product_id>', array('<attribute_code>')); $attributeValue = $product->getResource()->getAttribute('<attribute_code>')->getFrontend()->getValue($product); 

尝试这个

  $attribute = $_product->getResource()->getAttribute('custom_attribute_code'); if ($attribute) { echo $attribute_value = $attribute ->getFrontend()->getValue($_product); } 

您不必加载整个产品。 Magentos的集合非常强大和聪明。

 $collection = Mage::getModel('catalog/product')->getCollection(); $collection->addAttributeToFilter('entity_id', $product->getId()); $collection->addAttributeToSelect('manufacturer'); $product = $collection->getFirstItem(); $manufacturer = $product->getAttributeText('manufacturer'); 

在调用getFirstItem()的那一刻,查询将被执行并且结果产品非常小:

 [status] => 1 [entity_id] => 38901 [type_id] => configurable [attribute_set_id] => 9 [manufacturer] => 492 [manufacturer_value] => JETTE [is_salable] => 1 [stock_item (Varien_Object)] => Array ( [is_in_stock] => 1 ) 

这个工程 –

 echo $_product->getData('ATTRIBUTE_NAME_HERE'); 

你可以写一个方法,直接通过SQL我想。

会看起来像这样:

variables:

 $store_id = 1; $product_id = 1234; $attribute_code = 'manufacturer'; 

查询:

 SELECT value FROM eav_attribute_option_value WHERE option_id IN ( SELECT option_id FROM eav_attribute_option WHERE FIND_IN_SET( option_id, (SELECT value FROM catalog_product_entity_varchar WHERE entity_id = '$product_id' AND attribute_id = (SELECT attribute_id FROM eav_attribute WHERE attribute_code='$attribute_code') ) ) > 0) AND store_id='$store_id'; 

您将不得不根据属性的bac​​kend_type(eav_attribute中的字段)从正确的表中获取值,但是至less需要另外一个查询。

如果你有一个名为my_attr的text / textarea属性,你可以通过以下方式得到它: product->getMyAttr();