Gostaria de saber como desativar o botão Adicionar ao carrinho em alguns produtos específicos e encontrei um guia abandonado sobre como fazer isso, que funcionou, mas estava um pouco incompleto, pois era apenas uma solução nas páginas de visualização do produto, e não na lista de categorias ou nas páginas de grade.
Eu responderei minha própria pergunta aqui em 8 horas (já que preciso esperar 8 horas, pois minha reputação está abaixo de um certo ponto), depois de explicar os primeiros passos, e minha resposta será o 3º passo ausente que eu tinha que descobrir por mim mesmo. Vou tentar facilitar isso:
[Passo 1]
[1]
Crie um atributo que você usará em produtos nos quais não deseja um botão Adicionar ao carrinho. No painel do administrador, vá para ...
Catálogo> Atributos> Gerenciar atributos> Adicionar novo atributo
Nomeie seu atributo como desejar, por exemplo: "No_cart_button"
Com as propriedades:
Attribute Code: No_cart_button
Catalog Input Type for Store Owner: Yes/No
Use in Quick Search: No
Use in Advanced Search: No
Comparable on Front-end: No
Visible on Product View Page on Front-end: No
Used in Product Listing: YES
Used for Sorting in Product Listing: No
Com Gerenciar etiqueta / opções:
Admin: Disable Add to Cart
English: Disable Add to Cart
Agora salve este atributo.
[2]
Atribua seu novo atributo a um grupo, para que você possa usá-lo. Eu usei "Padrão". Vamos para...
Catalog > Attributes > Manage Attributes Sets > Select Set
Agora salve este conjunto de atributos.
[Passo 2]
Vamos adicionar um código para view.phtml
app/design/frontend/default/theme/template/catalog/product/view.phtml
Encontre este bloco de código:
<?php if (!$this->hasOptions()):?>
<div class="add-to-box">
<?php if($_product->isSaleable()): ?>
<?php echo $this->getChildHtml('addtocart') ?>
<?php if( $this->helper('wishlist')->isAllow() || $_compareUrl=$this->helper('catalog/product_compare')->getAddUrl($_product)): ?>
<span class="or"><?php echo $this->__('OR') ?></span>
<?php endif; ?>
<?php endif; ?>
<?php echo $this->getChildHtml('addto') ?>
</div>
<?php echo $this->getChildHtml('extra_buttons') ?>
<?php elseif (!$_product->isSaleable()): ?>
<div class="add-to-box">
<?php echo $this->getChildHtml('addto') ?>
</div>
<?php endif; ?>
ok, agora substitua-o por este bloco de código:
<?php
//Checks if the "Disable Add to Cart" variable is set to 'Yes':
if(($_product->getAttributeText('No_cart_button')) == "Yes"){
//If set to Yes, tell PHP what to output:
echo "This Product is not available online, please call our representative if you wish to purchase this.";
}
//If set as No, then show the 'add to cart box' as usual.
else {
?>
<?php if (!$this->hasOptions()):?>
<div class="add-to-box">
<?php if($_product->isSaleable()): ?>
<?php echo $this->getChildHtml('addtocart') ?>
<?php if( $this->helper('wishlist')->isAllow() || $_compareUrl=$this->helper('catalog/product_compare')->getAddUrl($_product)): ?>
<span class="or"><?php echo $this->__('OR') ?></span>
<?php endif; ?>
<?php endif; ?>
<?php echo $this->getChildHtml('addto') ?>
</div>
<?php echo $this->getChildHtml('extra_buttons') ?>
<?php elseif (!$_product->isSaleable()): ?>
<div class="add-to-box">
<?php echo $this->getChildHtml('addto') ?>
</div>
<?php endif; ?>
<?php
}
?>
Este código verifica se No_cart_button está definido como yes. Se estiver definido como sim, ele emitirá o código, que removerá o botão adicionar ao carrinho e exibirá o texto que diz: "Este produto não está disponível online, entre em contato com o nosso representante se desejar comprá-lo".
Ok, essas duas etapas estão concluídas e remove o item Adicionar ao carrinho na página de visualização do produto.
Mas isso não remove o botão "Adicionar ao carrinho" nas páginas da lista Categoria. Agora, queremos criar um botão "Visualizar detalhes" nas páginas da lista de categorias, em vez do botão "Adicionar ao carrinho".
[EDITAR]
Responda:
Se o kevinkirchner estiver correto, adicionaremos essa lógica ao list.phtml agora. Já garantimos que as configurações de atributo de "Usado na lista de produtos" estejam definidas como 'SIM'.
Está bem,
[Etapa 3]
Vamos fazer isso quando Desativar o carrinho estiver definido como Sim, também desabilitar o botão "Adicionar ao carrinho" nas páginas da lista Categoria.
Vá para list.phtml
app/design/frontend/default/theme/template/catalog/product/list.phtml
e pesquise esse arquivo por:
<?php if($_product->isSaleable()): ?>
Ele deve aparecer 2 vezes neste arquivo.
Logo abaixo desta linha, insira o seguinte código
<?php
if(($_product->getAttributeText('No_cart_button')) == "Yes"){ ?>
<p><button type="button" title="<?php echo $this->__('View Details') ?>" class="button btn-cart" onclick="location.href='<?php echo $_product->getProductUrl() ?>'"><span><span><?php echo $this->__('View Details') ?></span></span></button></p>
<?php
}
else {
?>
Logo abaixo do seu código que cria o botão normal 'Adicionar ao carrinho', você verá
<?php
}
?>
logo abaixo, insira outro código com o mesmo código:
<?php
}
?>
Ok, agora faça exatamente as mesmas duas etapas para o outro bloco de código neste arquivo, onde você encontrará
<?php if($_product->isSaleable()): ?>
Você deve fazer isso duas vezes, porque a primeira vez é no modo de exibição de lista e a segunda é no modo de exibição de grade.
fonte
Respostas:
Verifique se seu atributo está disponível na página de listagem de produtos, definindo "Usado na lista de produtos" para "Sim" ao editar seu atributo - captura de tela
Adicione sua lógica para
template/catalog/product/list.phtml
mostrar o botão Adicionar ao carrinho / Visualizar detalhesfonte