Как обновить значения продуктов Magento, используя сценарии установки / обновления и абстракции Magento? - PullRequest
4 голосов
/ 25 октября 2011

Я добавил пользовательский атрибут eav в свою сущность продукта приложения Magento, используя скрипт установщика (в основном, следуя процедуре, описанной здесь: Установка пользовательских атрибутов с вашим модулем ). Теперь я хочу использовать скрипт обновления для изменения (заполнения) значений этого атрибута для каждого продукта в соответствии с некоторыми критериями (в зависимости от категории продукта). Сценарий, который я пытался использовать, по сути был таким:

$attributeValues = array(...) // Map from $productId to the desired  $value
$product = Mage::getModel('catalog/product');
foreach($attributeValues as $productId=>$value){
    $product->load($productId)->setMyAttribute($value);
    $product->save();
}

Тогда у меня возникнут вопросы: можно ли использовать этот уровень абстракции (Mage :: getModel ('catalog / product') и его методы) в сценариях обновления? Если это не так, как бы вы порекомендовали изменить эти значения атрибутов с помощью сценариев обновления (не требуя sql)?

Сценарий, который я использовал (до сих пор), не работал и завершился ошибкой:

Call to a member function getStoreIds() on a non-object

в файле magento core.

Я не знаю, является ли эта ошибка ошибкой в ​​Magento или связана с тем, как я использую сценарии обновления.

Я использую Magento 1.4.0.1

Ответы [ 2 ]

2 голосов
/ 21 марта 2013

Сценарии обновления данных - путь к успеху

Просто используйте для этого скрипт обновления данных. Это скрипт, помещенный в папку data вместо папки sql. Эти сценарии запускаются позже, чем обновления структуры базы данных, и предоставляют доступ к дополнительным функциям.

Примеры имен файлов:

app/code/local/My/Module/data/your_setup/data-install-0.1.0.php
app/code/local/My/Module/data/your_setup/data-upgrade-0.1.0-0.2.0.php

Это уже доступно в Magento 1.4 .

1 голос
/ 28 ноября 2011

Попробуйте добавить Mage::app()->setUpdateMode(false) в ваш скрипт обновления sql. например

$installer = new Mage_Eav_Model_Entity_Setup('core_setup');;
$installer->startSetup();
Mage::app()->setUpdateMode(false);
Mage::app()->setCurrentStore('your_store_code_here');

Если вы заглянете в Mage::app()->getStore(), вы увидите следующий фрагмент, который возвращает неправильный магазин, необходимый для сохранения продукта.

if (!Mage::isInstalled() || $this->getUpdateMode()) {
        return $this->_getDefaultStore();
    }
...