quantité changement dans un menu déroulant sur la page produit
-
16-10-2019 - |
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.
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; ?>