Программно изменить атрибут продукта на уровне магазина - PullRequest
17 голосов
/ 07 июля 2011

Извините, если этот вопрос тривиален, но я изо всех сил пытался найти то, что я делаю здесь неправильно.Я пытаюсь изменить значение атрибута на уровне представления магазина, но значение по умолчанию также изменяется, тогда как это не должно быть.Конечно, этот атрибут настроен как «store-view-scoped».Чтобы было проще, я попробовал с названием продукта.Безуспешно.

Ниже приведены неудачные тесты, которые я пробовал ...

Видите ли вы, что я здесь делаю неправильно?*

Мои попытки:

$product = Mage::getModel('catalog/product')->load(PRODUCT_ID);
$product->setStoreId(STORE_ID)->setName('new_name')->save();

$product = Mage::getModel('catalog/product')->load(PRODUCT_ID);
$product->setStoreId(STORE_ID)->setStore(STORE_CODE)->setName('new_name')->save();

$product = Mage::getModel('catalog/product')->load(PRODUCT_ID);
$product->setStoreId(STORE_CODE)->setName('new_name')->save();

$product = Mage::getModel('catalog/product')->setStoreId(STORE_ID)->load(PRODUCT_ID);
$product->setName('new_name')->save();

$product = Mage::getModel('catalog/product')->setStoreId(STORE_ID)->load(PRODUCT_ID);
$product->setStoreId(STORE_ID)->setName('new_name')->save();

Я даже попытался добавить строку ниже до загрузки модели продукта ...

Mage::app()->setCurrentStore(STORE_ID);

Ответы [ 3 ]

46 голосов
/ 08 июля 2011

Итак, вот полный фрагмент для изменения значения атрибута для определенного атрибута продукта в определенном представлении магазина. Пример с названием товара:

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$product = Mage::getModel('catalog/product')->load(PRODUCT_ID);
$product->setStoreId(STORE_ID)->setName('my_new_product_name')->save();

И в качестве дополнительного ответа, может быть интересно изменить значение атрибута на значение по умолчанию. В этом случае аргумент 'false' должен быть передан в setAttribute:

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$product = Mage::getModel('catalog/product')->load(PRODUCT_ID);
$product->setStoreId(STORE_ID)->setName(false)->save();
12 голосов
/ 08 июля 2011

Вам нужно установить текущее хранилище как admin в верхней части блока кода:

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
3 голосов
/ 27 октября 2014

обратите внимание, что при загрузке товара с данными для какого-либо вида магазина также загружаются значения по умолчанию. сохранение такого продукта приведет к сохранению значений по умолчанию в качестве значений магазина (таким образом, для полей будет установлено значение «Использовать значение по умолчанию») я получил следующую функцию для очистки данных продукта от значений по умолчанию

public static function _removeDefaults($item) {
    static $attributeCodes = null;
    if($attributeCodes == null) {
        $attributes = Mage::getSingleton('eav/config')
            ->getEntityType(Mage_Catalog_Model_Product::ENTITY)->getAttributeCollection();
        $attributeCodes = array();
        foreach($attributes as $attribute) {
            $ac = $attribute->getAttributeCode();
            if(in_array($ac, array('sku','has_options','required_options','created_at','updated_at','category_ids'))) {
                continue;
            }
            $attributeCodes[] = $ac;
        }
    }
    foreach($attributeCodes as $ac) {
        if(false == $item->getExistsStoreValueFlag($ac)) {
            $item->unsetData($ac);
        }
    }
}

не забудьте отправить только товар, загруженный для какого-либо магазина

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...