Magento仅为特定商店获得制造商标签

时间:2016-04-13 09:29:28

标签: magento

我正在尝试仅为特定商店获得制造商标签,但它不起作用,我总是得到所有制造商(所有商店)。有任何想法吗?那是我的代码:

    $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

1 个答案:

答案 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);