Pergunta

Preciso exibir um texto "esgotado" para todos os produtos em um arquivo list.phtml...

estou a usar <?php if($_product->isSaleable()) : ?> e está funcionando muito bem para produtos simples, mas não está funcionando para produtos configuráveis.

Eu tentei algumas coisas e, por exemplo, este código

    if($productType == "configurable") {
        $arrayvalori = array("Small"=>"0","Regular"=>"0","Large"=>"0");
        $attValConfig = $product->getTypeInstance()->getConfigurableAttributesAsArray();

        if(sizeof($attValConfig)) {
            $hasAtts++;
            foreach($attValConfig as $attValConfigSingle) {
                foreach($attValConfigSingle['values'] as $attValConfigSingleVal) {
                    if($arrayvalori[$attValConfigSingleVal["label"]] > 0) {
                            echo 'buy';
                    } else {
                        echo "sold out";
                    }
                }
            }
        }
    }

Funciona, mas retorna todos os status dos atributos disponíveis (para o produto configurável) Exemplo de saída:

buy
buy
buy
buy
sold out
sold out
buy

Quero exibir compre se 1 ou mais variações estiverem disponíveis e exibir esgotado se todas estiverem esgotadas?!?!!

obrigado

Foi útil?

Solução

A resposta já está na sua pergunta.Como você disse, está mostrando compra e venda corretamente após o loop.Você só precisará modificar um pouco seu código.

$canBuy = false;
foreach ($attValConfig as $attValConfigSingle) {
    foreach ($attValConfigSingle['values'] as $attValConfigSingleVal) {
        if ($arrayvalori[$attValConfigSingleVal["label"]] > 0) {
            $canBuy = true;
        } 
    }
}

if($canBuy){
    echo 'buy';
}
else {
    echo 'sold out';
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top