Intereting Posts
Потребление не подтверждается сообщениями от RabbitMq Сообщение: Неопределенное свойство: CI_Loader :: $ table Как хранить файлы в MongoDB? API геокодирования Google Maps – смещение страны, причудливые результаты Разница между ArrayIterator, ArrayObject и Array в PHP содержимое вместо пути в оболочке Как разобрать XML-файл с несколькими объявлениями xml с помощью PHP? (Конкатенация нескольких файлов XML) Не удалось достоверно определить полное доменное имя сервера для MacBook каково использование сегмента $ this-> uri-> (3) в разбиении на страницы кода Существует ли встроенная функция php (5+), которая делает следующее в 1 строке? php cookie не обновляет CodeIgniter; $ это использование в не-объектном контексте Объединение двух многомерных массивов с использованием общего значения массива Ratchet PHP WAMP – React / ZeroMQ – Конкретная передача пользователей Заполните раскрывающийся список из таблицы mySQL в PHP

Не удалось обновить запасное количество товара для продукта в Magento 1.6.2

Я пытаюсь обновить количество запаса продуктов в Magento из сценария.

Я загружаю продукт, устанавливаю количество запасов и сохраняю – но количество остается неизменным.

// get stock data $stockData = $product->getStockItem(); printf(PHP_EOL.'Stock: qty=%d, instock=%s, man_stock=%s, use_cfg_man_stock=%s'.PHP_EOL, $stockData->getData('qty'), $stockData->getData('is_in_stock'), $stockData->getData('manage_stock'), $stockData->getData('use_config_manage_stock') ); // prints out qty=0, instock=, man_stock=, use_cfg_man_stock= // $stockQty = 1 $product->stockItem->setData('qty', $stockQty); $product->stockItem->setData('is_in_stock', $stockQty>0 ? 1 : 0); $product->stockItem->setData('manage_stock', 1); $product->stockItem->setData('use_config_manage_stock', 0); $product->save(); $product->load(); $stockData = $product->getStockItem(); printf('New Stock: qty=%d, instock=%s, man_stock=%s, use_cfg_man_stock=%s'.PHP_EOL, $stockData->getData('qty'), $stockData->getData('is_in_stock'), $stockData->getData('manage_stock'), $stockData->getData('use_config_manage_stock') ); // prints out qty=0, instock=, man_stock=, use_cfg_man_stock= 

Где я иду не так?

Все, что вам не хватало, – это сохранить $stockItem . Вам не нужно создавать новый stock_item и вам не нужно сохранять продукт.

 if (!($stockItem = $product->getStockItem())) { $stockItem = Mage::getModel('cataloginventory/stock_item'); $stockItem->assignProduct($product) ->setData('stock_id', 1) ->setData('store_id', 1); } $stockItem->setData('qty', $stockQty) ->setData('is_in_stock', $stockQty > 0 ? 1 : 0) ->setData('manage_stock', 1) ->setData('use_config_manage_stock', 0) ->save(); 

Я решил это сам:

 // get stock data $stockData = $product->getStockItem(); printf(PHP_EOL.'Stock: qty=%d, instock=%s, man_stock=%s, use_cfg_man_stock=%s'.PHP_EOL, $stockData->getData('qty'), $stockData->getData('is_in_stock'), $stockData->getData('manage_stock'), $stockData->getData('use_config_manage_stock') ); // prints out qty=0, instock=, man_stock=, use_cfg_man_stock= // $stockQty = 1 $stockItem = Mage::getModel('cataloginventory/stock_item'); $stockItem->assignProduct($product); $stockItem->setData('is_in_stock', 1); $stockItem->setData('stock_id', 1); $stockItem->setData('store_id', 1); $stockItem->setData('manage_stock', 0); $stockItem->setData('use_config_manage_stock', 0); $stockItem->setData('min_sale_qty', 0); $stockItem->setData('use_config_min_sale_qty', 0); $stockItem->setData('max_sale_qty', 1000); $stockItem->setData('use_config_max_sale_qty', 0); $stockItem->setData('qty', $stockQty); $stockItem->save(); $product->save(); $product->load(); $stockData = $product->getStockItem(); printf('New Stock: qty=%d, instock=%s, man_stock=%s, use_cfg_man_stock=%s'.PHP_EOL, $stockData->getData('qty'), $stockData->getData('is_in_stock'), $stockData->getData('manage_stock'), $stockData->getData('use_config_manage_stock') ); // prints out qty=1, instock=1, man_stock=0, use_cfg_man_stock=0 - // get stock data $stockData = $product->getStockItem(); printf(PHP_EOL.'Stock: qty=%d, instock=%s, man_stock=%s, use_cfg_man_stock=%s'.PHP_EOL, $stockData->getData('qty'), $stockData->getData('is_in_stock'), $stockData->getData('manage_stock'), $stockData->getData('use_config_manage_stock') ); // prints out qty=0, instock=, man_stock=, use_cfg_man_stock= // $stockQty = 1 $stockItem = Mage::getModel('cataloginventory/stock_item'); $stockItem->assignProduct($product); $stockItem->setData('is_in_stock', 1); $stockItem->setData('stock_id', 1); $stockItem->setData('store_id', 1); $stockItem->setData('manage_stock', 0); $stockItem->setData('use_config_manage_stock', 0); $stockItem->setData('min_sale_qty', 0); $stockItem->setData('use_config_min_sale_qty', 0); $stockItem->setData('max_sale_qty', 1000); $stockItem->setData('use_config_max_sale_qty', 0); $stockItem->setData('qty', $stockQty); $stockItem->save(); $product->save(); $product->load(); $stockData = $product->getStockItem(); printf('New Stock: qty=%d, instock=%s, man_stock=%s, use_cfg_man_stock=%s'.PHP_EOL, $stockData->getData('qty'), $stockData->getData('is_in_stock'), $stockData->getData('manage_stock'), $stockData->getData('use_config_manage_stock') ); // prints out qty=1, instock=1, man_stock=0, use_cfg_man_stock=0 - // get stock data $stockData = $product->getStockItem(); printf(PHP_EOL.'Stock: qty=%d, instock=%s, man_stock=%s, use_cfg_man_stock=%s'.PHP_EOL, $stockData->getData('qty'), $stockData->getData('is_in_stock'), $stockData->getData('manage_stock'), $stockData->getData('use_config_manage_stock') ); // prints out qty=0, instock=, man_stock=, use_cfg_man_stock= // $stockQty = 1 $stockItem = Mage::getModel('cataloginventory/stock_item'); $stockItem->assignProduct($product); $stockItem->setData('is_in_stock', 1); $stockItem->setData('stock_id', 1); $stockItem->setData('store_id', 1); $stockItem->setData('manage_stock', 0); $stockItem->setData('use_config_manage_stock', 0); $stockItem->setData('min_sale_qty', 0); $stockItem->setData('use_config_min_sale_qty', 0); $stockItem->setData('max_sale_qty', 1000); $stockItem->setData('use_config_max_sale_qty', 0); $stockItem->setData('qty', $stockQty); $stockItem->save(); $product->save(); $product->load(); $stockData = $product->getStockItem(); printf('New Stock: qty=%d, instock=%s, man_stock=%s, use_cfg_man_stock=%s'.PHP_EOL, $stockData->getData('qty'), $stockData->getData('is_in_stock'), $stockData->getData('manage_stock'), $stockData->getData('use_config_manage_stock') ); // prints out qty=1, instock=1, man_stock=0, use_cfg_man_stock=0 

Создав новый элемент StockItem и присвоив его этому продукту. Надеюсь, это помогает кому-то другому.

Чтобы отобразить количество товара для продукта –

  <?php echo $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product); ?> 

И если вы хотите отображать отдельные данные, используйте это –

 <?php echo $stock->getQty(); ?> // Will display stock quantity <?php echo $stock->getMinQty(); ?> // Will display minimum quantity <?php echo $stock->getMinSaleQty(); ?> //will display minimum salable quantity 

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

 'name' => $productName, 'stock_data' => array( 'use_config_manage_stock' => 0, 'manage_stock' => 0, 'qty' => 0, 'stock_id' => 1, 'min_qty' => 0, ) 

Без информации о запасах Magento генерирует исключение (при \ Mage_CatalogInventory_Model_Stock_Item) при добавлении продукта в корзину.

С этим узлом он работает. знак равно