Je me demandais comment désactiver le bouton Ajouter au panier sur certains produits spécifiques, et j'ai trouvé un guide abandonné sur la façon de le faire, qui a fonctionné, mais il était quelque peu incomplet, car il ne s'agissait que d'une solution sur les pages d'affichage des produits, et non sur la liste des catégories ou les pages de la grille.
Je répondrai ici à ma propre question dans 8 heures (car j'ai besoin d'attendre 8 heures, car ma réputation est en dessous d'un certain point), après avoir expliqué les premières étapes, et ma réponse sera la 3e étape manquante que je devais comprendre pour moi. Je vais essayer de rendre cela facile à suivre:
[Étape 1]
[1]
Créez un attribut que vous utiliserez sur les produits sur lesquels vous ne souhaitez pas ajouter de bouton Ajouter au panier. Dans le tableau de bord Admin, accédez à ...
Catalogue> Attributs> Gérer les attributs> Ajouter un nouvel attribut
Nommez votre attribut comme bon vous semble, par exemple: "No_cart_button"
Avec les propriétés:
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
Avec Gérer l'étiquette / les options:
Admin: Disable Add to Cart
English: Disable Add to Cart
Enregistrez maintenant cet attribut.
[2]
Attribuez votre nouvel attribut à un groupe afin de pouvoir l'utiliser. J'ai utilisé "Default". Aller à...
Catalog > Attributes > Manage Attributes Sets > Select Set
Enregistrez maintenant cet ensemble d'attributs.
[Étape 2]
Nous allons ajouter du code à view.phtml
app/design/frontend/default/theme/template/catalog/product/view.phtml
Trouvez ce bloc de code:
<?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, remplacez-le maintenant par ce bloc de code:
<?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
}
?>
Ce code vérifie si No_cart_button est défini sur yes. S'il est défini sur Oui, il génère le code, ce qui supprimera le bouton Ajouter au panier et affichera à la place du texte qui dit: "Ce produit n'est pas disponible en ligne, veuillez contacter notre représentant si vous souhaitez l'acheter.".
Ok, ces 2 étapes sont terminées et supprime Ajouter au panier sur la page de visualisation du produit.
Mais cela ne supprime pas le bouton "Ajouter au panier" sur les pages de liste des catégories. Maintenant, nous voulons créer un bouton "Afficher les détails" sur les pages de liste de catégories, au lieu du bouton "Ajouter au panier".
[ÉDITER]
Répondre:
kevinkirchner est correct, nous allons ajouter cette logique à list.phtml maintenant. Nous avons déjà vérifié que les paramètres d'attribut pour "Utilisé dans la liste des produits" sont définis sur "OUI".
D'accord,
[Étape 3]
Nous le ferons ainsi lorsque Désactiver le panier est défini sur Oui, il désactive également le bouton "Ajouter au panier" sur les pages de liste des catégories.
Accédez à list.phtml
app/design/frontend/default/theme/template/catalog/product/list.phtml
et recherchez dans ce fichier:
<?php if($_product->isSaleable()): ?>
Il devrait apparaître 2 fois dans ce fichier.
Juste en dessous de cette ligne, insérez le code suivant
<?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 {
?>
Ensuite, juste en dessous de votre code qui crée le bouton normal "Ajouter au panier", vous verrez
<?php
}
?>
juste en dessous, insérez un autre du même morceau de code:
<?php
}
?>
Ok, maintenant faites exactement la même chose en 2 étapes pour l'autre bloc de code dans ce fichier où vous trouvez
<?php if($_product->isSaleable()): ?>
Vous devez le faire deux fois, car la première fois est pour la vue Liste et la deuxième fois pour la vue Grille.