1

如何找到产品属性集的值?

例如,有一个产品的属性集称为衬衫 - T,其属性包括性别、衬衫尺码和颜色。从 $_product 对象开始,我如何找到属性的值,例如 Mens、Green、Large?

我可以通过以下方式获取属性集值:

$product = Mage::getModel('catalog/product')->load($productId);
        $prodAttributeSet = Mage::getModel('eav/entity_attribute_set')->load($product->getAttributeSetId())->getAttributeSetName();

我想获取特定属性集的所有可用属性集值和代码(即衬衫 - T)

4

3 回答 3

0
$_product = Mage::getModel('catalog/product')->load($productId);

现在假设您要访问该产品制造商的值,然后考虑以下代码。

$manufacturerValue = $_product->getAttributeText('manufacturer');
于 2013-09-04T11:05:30.150 回答
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)
    );
}
于 2013-09-04T11:16:41.430 回答
0

如果您想要一个属性集的所有属性,您可以执行以下操作。

$product = Mage::getModel('catalog/product')->load($productId);
$attributes = $eavConfig->getEntityAttributeCodes( Mage_Catalog_Model_Product::ENTITY, $product );
print_r(attributes);
于 2014-05-21T12:20:27.107 回答