Tentei alguns trechos encontrados online, mas sem sucesso.
Apenas tentando definir um produto para estar em estoque / fora de estoque com código, isso é o máximo que eu consegui:
$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();
Ele não faz alterações nas informações do produto quando visualizado no painel do administrador, tem alguma idéia?
inventory
ce-1.6.2.0
Mike
fonte
fonte
Respostas:
Tente isso:
e defina e salve suas alterações como antes.
fonte
Tente o seguinte. você não precisa carregar um novo objeto de estoque
E basta salvar o produto como você fez no seu script
fonte
Eu tive um problema semelhante, mas com a diferença de que não havia nenhum objeto de item de estoque para um produto específico. Quando isso acontece, é bom criar o objeto de item de estoque inicialmente antes de definir a quantidade (a menos que exista um caminho para eles ao mesmo tempo).
fonte
$product->save();
- é necessário depois de salvar$stockItem
?experimentando o magento 1.8.1.0 CE e não foi possível salvar "qty" devido à falta do valor "type_id" (para novo item). resolvido por
fonte
Como complemento a todas as respostas, pode ser uma boa ideia usar, em
addData
vez de mais,setData
ser seguro para atualizar as informações e não apenas defini-las.fonte
Quero sugerir uma alteração na resposta de Raj para apoiar situações estranhas. Para que a resposta funcionasse, tive que comentar a instrução if, porque os produtos criados de maneira programática podem ter dados de estoque parciais, mas incompletos. Esta foi a única maneira que eu consegui fazer funcionar.
fonte
Aqui está uma causa possível que me custou cerca de 2 horas de trabalho: eu estava tentando isso há séculos, me perguntando por que não salvaria. Eu tive uma
exit;
instrução php após o->save()
e um monte de ecos para que não passasse para a próxima tela automaticamente (para ajudar na depuração).No entanto, as confirmações no banco de dados devem ocorrer mais tarde no carregamento da página e não serão salvas para mim até que eu remova o arquivo
exit;
!fonte
Como em outras respostas sugeridas, pode-se usar a classe
Mage_CatalogInventory_Model_Stock_Item
diretamente. Mas é preciso fazer referência ao produto corretamente por meio de uma chamadasetProduct
para ter um código de trabalho para itens de estoque novos e existentes.Solução alternativa
No entanto, se você ligar de
$product->save
qualquer maneira, eu apenas definiria os dados de ações da$product->setStockdata($array)
seguinte maneira. Dessa forma, o Magento cria um item de estoque correto a partir dos dados do estoque. A grande vantagem é que a atualização do item de estoque ocorre na mesma transação que$product->save()
. Isso é importante para a consistência dos dados.fonte
Este é o meu código c #
is_in_stockSpecified
é importanteEsta é a saída
fonte