Question

Comment puis-je modifier la zone de saisie de texte Quantité à un menu déroulant des produits configurables?

J'ai ce morceau de code dans mon fichier /catalog/product/view/addtocart.phtml

 <label for="qty"><?php echo $this->__('Quantity') ?></label>
    <select class="input-text qty" name="qty" id="qty">

      <?php $i = 1 ?>
      <?php do { ?>
        <option value="<?php echo $i?>">
          <?php echo $i?>
          <?php $i++ ?>
        </option>
        <?php } while ($i <= (int)Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product)->getQty()) ?></select>
    </div>
    <?php endif; ?>

Cela fonctionne bien pour les produits simples, montrant 1 à de nombreux articles que je cependant ai en stock. Mais sur les produits configurables, il montre seulement « 1 » dans le menu déroulant. (Probablement parce que le produit configurable lui-même ne pas l'inventaire)

J'ai vu cette page StackExchange , mais ne l'ont pas été en mesure de l'adapter à ce que je veux.

Edit: Voici un cas d'utilisation -

Dites que j'ai des bottes disponibles en quatre tailles.

Bottes:
Taille 6 - 3 paires
Taille 7 - 2 paires
Taille 8 - 1 paire
Taille 9 - 4 paires

Lorsque je sélectionne « Taille 6, » Je voudrais le menu déroulant Quantité à 1-3. Si je sélectionne la taille 9, il devrait aller jusqu'à 4.

Était-ce utile?

La solution

La première chose d'abord de:

  • À l'heure actuelle votre code actuel est ré-interroger la base de données pour les informations d'inventaire à chaque itération de la boucle. Ne pas appeler Mage::getModel dans une boucle ... jamais
  • Avec cela à l'esprit, vous ne voulez probablement pas à demander Magento pour obtenir un modèle dans le fichier de modèle soit. Donc, vous voulez probablement ajouter une méthode à votre bloc pour obtenir la quantité maximale disponible dans la base de données, puis Arrêter la création <option>s lorsque vous atteignez cette limite .

En supposant ce qui précède est vrai vous devez créer un module personnalisé avec un bloc personnalisé. Le fichier modèle que vous modifiez actuellement devrait être modifié comme par exemple:

<?php echo $this->getChildHtml('quantityoptionsdropdown');?>

Ensuite, dans votre mise en page xml (peut-être local.xml), vous devez définir ce bloc d'alias:

<catalog_product_view>
    <block type="yourcompany/options" template="yourcompany/options.phtml" name="quantityoptionsdropdown" as="quantityoptionsdropdown"/>
</catalog_product_view>

Notez que nous avons utilisé yourcompany/options là - qui devrait carte à votre classe de bloc de module personnalisé nommé Options. Ainsi, le chemin complet de la classe (au moins pour cet exemple) serait quelque chose comme YourCompany_YourModule_Block_Options.

Voilà donc ce que votre classe de bloc ressemblerait à ceci:

app / code / local / VotreEntreprise / YourModule / Bloc / options.php

class YourCompany_YourModule_Block_Options extends Mage_Core_Block_Abstract
{
    public function getStockMaximumQty()
    {
        $product = $this->getProduct();

        return $this->getProduct()->getStockItem()->getQty();
    }

    public function getProduct()
    {
        if(!$this->product){
            $this->product = Mage::registry('current_product');
        }
        return $this->product;
    }
}

Maintenant, votre fichier modèle:

app / design / frontend / base / default / template / yourcompany / options.phtml

<?php if($this->getStockMaximumQty()>0): ?>
    <? $i = 0; ?>
    <select name="quantity" id="qty">
        <?php while($i<=$this->getStockMaximumQty():?>
        <option value="<?php echo $i; ?>"><?php echo $i++; ?></option>
        <?php endwhile; ?>
    </select>
<?php else: ?>
    <?php echo $this->__('This product is currently out of stock.'); ?>
<?php endif; ?>
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top