如何找到产品属性集的值?
例如,有一个名为shirts-T的属性集产品,其属性为“性别”,“衬衫大小”和“颜色”。从$ _product对象开始,如何找到属性的值,例如男士,绿色,大?
我能够通过以下方式获取属性设置值:
$product = Mage::getModel('catalog/product')->load($productId);
$prodAttributeSet = Mage::getModel('eav/entity_attribute_set')->load($product->getAttributeSetId())->getAttributeSetName();
我想得到所有可用的属性集值和特定属性集的代码(即shirt-T)
答案 0 :(得分:0)
$_product = Mage::getModel('catalog/product')->load($productId);
现在假设您要访问此产品的制造商的价值,请考虑以下代码。
$manufacturerValue = $_product->getAttributeText('manufacturer');
答案 1 :(得分:0)
正如您在评论中提到的尺寸和颜色,我可以给您一个示例代码供您使用。
如果是select or multiselect
属性,您仍需要将选项ID映射到选项值。如果您获得整数列表而不是人类可读标签(例如颜色或制造商属性),则会出现这种情况。
// specify the select or multiselect attribute code
$attributeCode = 'color';
// build and filter the product collection
$products = Mage::getResourceModel('catalog/product_collection')
->addAttributeToFilter($attributeCode, array('notnull' => true))
->addAttributeToFilter($attributeCode, array('neq' => ''))
->addAttributeToSelect($attributeCode);
$usedAttributeValues = array_unique($products->getColumnValues($attributeCode));
// ---- this is the different part compared to the previous example ----
// fetch the attribute model
$attributeModel = Mage::getSingleton('eav/config')
->getAttribute('catalog_product', $attributeCode);
// map the option id's to option labels
$usedAttributeValues = $attributeModel->getSource()->getOptionText(
implode(',', $usedAttributeValues)
);
直接数据库查询示例
根据您要执行此操作的位置,以下是在不使用产品集合的情况下获取值的示例。它稍微有点效率。 仅在资源模型中使用以下代码,就像DB相关代码所属的那样。 这是一个教育示例,展示如何使用Magento的EAV表。
// specify the attribute code
$attributeCode = 'color';
// get attribute model by attribute code, e.g. 'color'
$attributeModel = Mage::getSingleton('eav/config')
->getAttribute('catalog_product', $attributeCode);
// build select to fetch used attribute value id's
$select = Mage::getSingleton('core/resource')
->getConnection('default_read')->select()
->from($attributeModel->getBackend()->getTable(), 'value')
->where('attribute_id=?', $attributeModel->getId())
->distinct();
// read used values from the db
$usedAttributeValues = Mage::getSingleton('core/resource')
->getConnection('default_read')
->fetchCol($select);
// map used id's to the value labels using the source model
if ($attributeModel->usesSource())
{
$usedAttributeValues = $attributeModel->getSource()->getOptionText(
implode(',', $usedAttributeValues)
);
}
答案 2 :(得分:0)
如果您想要属性集的所有属性,您可以执行以下操作。
$product = Mage::getModel('catalog/product')->load($productId);
$attributes = $eavConfig->getEntityAttributeCodes( Mage_Catalog_Model_Product::ENTITY, $product );
print_r(attributes);