Удалить значение уровня хранилища для атрибута категории


В нашем магазине у нас есть атрибут категории клиентов, который был установлен для каждого магазина. Теперь мы хотим удалить значения уровня хранилища и заменить его одним глобальным уровнем. Теперь я знаю, как это сделать через администратора, но есть ли способ отсортировать это с помощью сценария настройки.

Author: David Manners, 2015-06-11

1 answers

Я думаю, что вы можете повторить поведение контроллера категории администратора, saveAction.

if ($useDefaults = $this->getRequest()->getPost('use_default')) {
    foreach ($useDefaults as $attributeCode) {
        $category->setData($attributeCode, false);
    }
}

Но для этого требуется load в цикле. На самом деле 2 петли.
Что-то вроде этого (непроверенный код)

$attributeCode  = 'attribute_code_here';
$collection = Mage::getModel('catalog/category')->getCollection()->addLevelFilter(2); //exclude the root of all roots and the root catalog.
$stores = Mage::getModel('core/store')->getCollection()->setWithoutDefaultFilter();

foreach ($collection as $category) {
    foreach ($stores as $store) {
         $_category = Mage::getModel('catalog/category')->setStoreId($store->getId())->load($category->getId());
         $_category->setData($attributeCode, false);
         $_category->save();
    }
}

Я знаю, что это не лучшее решение, но, поскольку это будет выполняться только один раз, это не должно быть такой большой проблемой.
Я все еще говорю, что вы должны использовать запрос. Это намного быстрее.

 4
Author: Marius, 2015-06-11 12:17:53