我正在尝试仅为特定商店获得制造商标签,但它不起作用,我总是得到所有制造商(所有商店)。有任何想法吗?那是我的代码:
$entityTypeIdentifier = 'catalog_product';
$attributeCode = 'manufacturer';
$storeId = 2;
$attributeModel = Mage::getModel('eav/entity_attribute');
$attributeId =
$attributeModel->getIdByCode($entityTypeIdentifier,$attributeCode);
$attribute = $attributeModel->load($attributeId);
$attribute->setStoreId( $storeId );
$attributeOptionsModel = Mage::getModel('eav/entity_attribute_source_table');
$attributeTable = $attributeOptionsModel->setAttribute($attribute);
$options = $attributeOptionsModel->getAllOptions(false);
echo '<pre>';
print_r($options);
忽略 $attribute->setStoreId( $storeId );
,结果如下:
Array
(
[0] => Array
(
[value] => 204
[label] => 3M ESPAÑA
)
.
.
.
这是eav_attribute_option_value表:
value_id option_id STORE_ID 值
1263 204 0 3MESPAÑA
1264 204 1 3MESPAÑA
答案 0 :(得分:0)
在Mage_Eav_Model_Entity_Attribute_Source_Table类的getAllOptions函数中,无论是否具有商店特定值,都将返回选项的值。
例如,如果您有100个属性选项,而商店#2具有20个值,则无论您是否setStoreId(2),选项模型都将返回100个选项。如果您设置商店ID,则模型将在商店#2值中返回20个,其他80个选项保留默认值。
但是如果你需要答案才能得到这20个值,那么你就是我的朋友:
$entityTypeIdentifier = 'catalog_product';
$attributeCode = 'manufacturer';
$storeId = 2;
$resource = Mage::getSingleton('core/resource');
$connection = $resource->getConnection('read');
$query = $connection->select()
->from(array('e' => $resource->getTableName('eav/attribute')), array())
->joinLeft(array(
'f' => $resource->getTableName('eav/entity_type')),
"e.entity_type_id = f.entity_type_id AND f.entity_type_code = '$entityTypeIdentifier'",
array()
)
->joinLeft(array(
'g' => $resource->getTableName('eav/attribute_option')),
'e.attribute_id = g.attribute_id',
array()
)
->joinRight(
array('h' => $resource->getTableName('eav/attribute_option_value')),
"g.option_id = h.option_id AND h.store_id = $storeId",
array('h.option_id', 'h.value')
)
->where('e.attribute_code = ?', $attributeCode);
$options = $connection->fetchAssoc($query);
echo '<pre>';
print_r($options);