Я попробовал несколько фрагментов, найденных в сети, но безуспешно.
Насколько я понял, просто пытаясь настроить товар на наличие / отсутствие на складе с помощью кода:
$product = Mage::getModel('catalog/product')->load( 'id' );
$stockItem = $product->getStockItem();
$stockItem->setData('manage_stock', 1);
$stockItem->setData('is_in_stock', 0);
$stockItem->setData('use_config_notify_stock_qty', 0);
$stockItem->setData('qty', 0);
$stockItem->save();
$product->save();
Он не вносит никаких изменений в информацию о продукте при просмотре через панель администратора, есть идеи?
inventory
ce-1.6.2.0
Майк
источник
источник
Ответы:
Попробуйте это вместо:
а затем установите и сохраните изменения, как и раньше.
источник
Попробуйте следующее. вам не нужно загружать новый объект
И просто сохраните продукт, как вы сделали в своем скрипте
источник
У меня была похожая проблема, но с той разницей, что для конкретного продукта не было ни одного предмета. Когда это происходит, хорошо сначала создать объект позиции запаса, прежде чем задавать количество (если не существует пути к ним одновременно).
источник
$product->save();
- требуется ли после сохранения$stockItem
?пытается на magento 1.8.1.0 CE и не может сохранить "qty" из-за отсутствия значения "type_id" (для нового элемента). решено
источник
В качестве дополнения ко всем ответам может быть хорошей идеей использовать
addData
вместо того,setData
чтобы быть в безопасности, для обновления информации, а не только ее установки.источник
Я хочу предложить изменить ответ Радж, чтобы поддержать странные ситуации. Чтобы ответ работал, мне пришлось закомментировать оператор if, потому что продукты, созданные программным способом, могут иметь частичные, но неполные данные о запасах. Это был единственный способ, которым я смог заставить его работать.
источник
Вот возможная причина, которая стоила мне около 2 часов работы: я пытался это целую вечность, задаваясь вопросом, почему это не спасет. У меня был оператор
exit;
php после->save()
и много эха, чтобы он не переходил на следующий экран автоматически (для отладки).Однако фиксация в базе данных должна происходить поздно при загрузке страницы, она не сохранится для меня, пока я не удалю
exit;
!источник
Как и в других предложенных ответах, можно использовать класс
Mage_CatalogInventory_Model_Stock_Item
напрямую. Но для правильного обращения к продукту необходимо указатьsetProduct
рабочий код как для новых, так и для существующих товаров на складе.Альтернативное решение
Однако, если вы
$product->save
все равно позвоните, я бы просто установил данные о запасах$product->setStockdata($array)
следующим образом. Таким образом, Magento создает правильный товар из данных о запасах. Большим преимуществом является то, что обновление товара происходит в той же транзакции, что и$product->save()
. Это важно для согласованности данных.источник
Это мой код C #
is_in_stockSpecified
является важнымЭто выход
источник