Я писал сценарий, который обновляет мой атрибут add_ten_pence
, этот атрибут является логическим значением yes / no. На данный момент он проходит через SKU's
в базе данных, но, к сожалению, он не обновляет базу данных. Я вставил скрипт ниже, кто-нибудь знает, где я ошибаюсь?
Атрибут установлен как «Нет» по умолчанию, и я хочу изменить его на «Да» при запуске скрипта и наоборот.
require_once('app/Mage.php'); umask(0); Mage::app('default'); Mage :: app ()->setCurrentStore(Mage_Core_Model_App :: ADMIN_STORE_ID); $productCollection = Mage::getModel('catalog/product')->getCollection(); foreach($productCollection as $_product) { echo "\n".'updating '.$_product->getSku()."...\n"; $product = Mage::getModel('catalog/product')->load($_product->getEntityId()); $product->setAddTenPence(true); $product->save(); }
поrequire_once('app/Mage.php'); umask(0); Mage::app('default'); Mage :: app ()->setCurrentStore(Mage_Core_Model_App :: ADMIN_STORE_ID); $productCollection = Mage::getModel('catalog/product')->getCollection(); foreach($productCollection as $_product) { echo "\n".'updating '.$_product->getSku()."...\n"; $product = Mage::getModel('catalog/product')->load($_product->getEntityId()); $product->setAddTenPence(true); $product->save(); }
Попробуйте сохранить единственный атрибут вместо всей коллекции продукта.
require_once('app/Mage.php'); umask(0); Mage::app('default'); Mage::app ()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); $productCollection = Mage::getModel('catalog/product')->getCollection(); foreach($productCollection as $_product) { echo "\n".'updating '.$_product->getSku()."...\n"; $_product->setData('add_ten_pence', 1)->getResource()->saveAttribute($_product, 'add_ten_pence'); }
поrequire_once('app/Mage.php'); umask(0); Mage::app('default'); Mage::app ()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); $productCollection = Mage::getModel('catalog/product')->getCollection(); foreach($productCollection as $_product) { echo "\n".'updating '.$_product->getSku()."...\n"; $_product->setData('add_ten_pence', 1)->getResource()->saveAttribute($_product, 'add_ten_pence'); }
ОБНОВИТЬ
Гораздо быстрее:
$productCollection = Mage::getModel('catalog/product')->getCollection(); $array_product = $productCollection->getAllIds(); Mage::getSingleton('catalog/product_action')>updateAttributes($array_product, array('add_ten_pence' => 1), Mage_Core_Model_App::ADMIN_STORE_ID);
(Спасибо https://magento.stackexchange.com/users/146/marius !)