Mostrando Fora de Estoque variantes(simples) quando todas as variantes estão fora de estoque?
-
12-12-2019 - |
Pergunta
Eu ter a capacidade de mostrar Fora de Estoque variantes quando todas as variantes(simples/crianças) em um configuráveis estão fora de estoque.O padrão bahavior eu estou tentando superar é remover o produto-opções de todos juntos.
Eu fiz o seguinte código de ajuste local para editar app\code\core\Mage\Catalog\Block\product\View ype\Configurable.php para assegurar fora de estoque variantes mostram quando o programa de opção de compra de Ações (Sistema > Administração > Estoque > Mostrar Fora de Estoque) é definido para "Sim":
public function getAllowProducts()
{
// check OoS display value (admin > config > inventory > stock options > display out of stock products)
$showOos = Mage::helper('cataloginventory')->isShowOutOfStock();
if (!$this->hasAllowProducts()) {
$products = array();
$skipSaleableCheck = Mage::helper('catalog/product')->getSkipSaleableCheck();
$allProducts = $this->getProduct()->getTypeInstance(true)
->getUsedProducts(null, $this->getProduct());
foreach ($allProducts as $product) {
// if OoS display 'Yes' show all variants
if ($showOos === true) {
$products[] = $product;
// if not, filter out OoS variants
} else if ($product->isSaleable() || $skipSaleableCheck) {
$products[] = $product;
}
}
$this->setAllowProducts($products);
}
return $this->getData('allow_products');
}
Isso funciona muito bem desde que pelo menos uma variante está em estoque.Se todos eles estão definidas para fora de estoque, produto-opções desativa a configurável nível.Algumas notas:
- Eu comecei manipulando o hasOptions() função, sem sorte.Eu também removido isso como uma condição se sobre o modo de exibição.phtml página redor do meu 'container1' e 'container2' getChildChildHTML declarações.(originalmente de 'if ($_product->isSaleable() && $this->hasOptions ())", já comentada, exclusivamente para teste) Este retorna as opções de produto próprio recipiente, mas não gera variantes de lista.
- A execução de um $produto->getOptions() foreach para um configuráveis no modo de exibição.phtml com tudo fora de estoque variantes não retorna nada.
Tenho a sensação de que existe algo mais profundo que eu estou faltando.Alguém que lidar com isso antes?
Solução
Adicionar este
$defaultSkip = Mage::helper('catalog/product')->getSkipSaleableCheck();
Mage::helper('catalog/product')->setSkipSaleableCheck(true);
direito acima
$skipSaleableCheck = Mage::helper('catalog/product')->getSkipSaleableCheck();
e
Mage::helper('catalog/product')->setSkipSaleableCheck($defaultSkip);
antes ou depois de
$this->setAllowProducts($products);