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?

Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top