Tenho o requisito de exibir os produtos de uma categoria em duas listas - uma para itens em estoque e outra para itens fora de estoque.
estou a usar
Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection()
para filtrar minha coleção de produtos para os itens em estoque, mas não parece haver um método equivalente para filtrar itens fora de estoque - observei o Mage_CatalogInventory_Model_Stock
modelo, onde é definido o método mencionado acima.
Vi o exemplo a seguir para recuperar produtos fora de estoque:
$collection->joinField(
'is_in_stock',
'cataloginventory/stock_item',
'is_in_stock',
'product_id=entity_id',
'{{table}}.stock_id=1',
'left'
)
->addAttributeToFilter('is_in_stock', array('eq' => 0));
... mas certamente essa não é a única maneira de conseguir isso?
Seu exemplo não leva em consideração o valor de "use config".
Vamos dar uma olhada em como
addInStockFilterToCollection
funciona:OK, está delegando para outro método:
Isso une a tabela de inventário às seguintes condições:
O produto não usa a configuração global E tem "gerenciar estoque" definido como "sim" E está em estoque
OU
O produto não usa a configuração global E "gerencia o estoque" definido como "não"
OU
Você precisa inverter as condições da seguinte maneira:
O produto não usa a configuração global E "gerencia o estoque" definido como "sim" E não está em estoque
OU
O produto usa a configuração global E a configuração global é "gerenciar estoque = sim" E não está em estoque
Explicação: Você pega apenas as condições em que in_stock está realmente marcado e altera a comparação para 0. As condições em que in_stock não está marcado ("gerenciar estoque" = "não") significa que o produto está sempre em estoque, independentemente do status do estoque , para não incluí-los em nossa consulta "fora de estoque".
Então este é o seu código:
fonte
Mage_CatalogInventory_Model_Stock
modelo?$this
. Poderia muito bem ser função simples. Gostaria de criar um módulo separado e torná-lo um método auxiliar (ou se você precisa deste para outro módulo, adicioná-lo ao ajudante desse módulo)O seguinte snippet de código retornará os produtos de uma categoria com status 'Ativar', Visibilidade 'catálogo, pesquisa' e Disponibilidade de estoque 'Fora de estoque'.
fonte
Você pode tentar isso.
Ou você pode tentar isso
Não tenho certeza 100%.
fonte