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的回答 ,因为它在大多数情况下都适合您。
除了获取属性值的方法之外,您可能还需要获取select
或multiselect
的标签。 在这种情况下,我创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';
您将不得不根据属性的backend_type(eav_attribute中的字段)从正确的表中获取值,但是至less需要另外一个查询。
如果你有一个名为my_attr的text / textarea属性,你可以通过以下方式得到它: product->getMyAttr();