Domanda

Come faccio a cambiare la casella di immissione quantità di testo a un menu a discesa sui prodotti configurabili?

Ho questo pezzo di codice nel mio file /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; ?>

Questo funziona bene per i prodotti semplici, mostrando da 1 a molte voci però ho in magazzino. Ma sui prodotti configurabile, mostra solo '1' nel menu a discesa. (Probabilmente perché il prodotto configurabile in sé non abbia inventario)

questa pagina StackExchange , ma non sono stati in grado di adattarsi a quello che voglio.

Edit: Ecco un caso d'uso -

Di 'Ho stivali disponibili in quattro dimensioni.

Stivali:
Size 6 - 3 paia
Size 7 - 2 coppie
Size 8 - 1 paio
Dimensione 9 - 4 coppie

Quando seleziono "Formato 6," Vorrei la quantità discesa per essere 1-3. Se seleziono dimensione 9, dovrebbe andare fino a 4.

È stato utile?

Soluzione

La prima cosa di prima:

  • Al momento il codice corrente è ri-interrogare il database per le informazioni di inventario su ogni iterazione del ciclo. Non chiamare Mage::getModel in un ciclo ... mai
  • Con questo in mente, probabilmente non si vuole chiedere Magento per ottenere un modello all'interno del file di modello sia. Quindi probabilmente si desidera aggiungere un metodo al blocco per ottenere il quantitativo massimo disponibile nel database e quindi fermata creando <option>s quando si raggiunge quel limite .

Supponendo che quanto sopra è vero è necessario creare un modulo personalizzato con un blocco personalizzato. Il file di modello che si sta modificando deve essere modificato per leggere come tale:

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

Poi nel layout xml (possibilmente local.xml) si dovrà definire quel blocco alias:

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

Si noti che abbiamo usato yourcompany/options lì - che dovrebbe mappare alla classe blocco del modulo personalizzato denominato Opzioni. Così il percorso completo della classe (almeno per questo esempio) sarebbe qualcosa di simile YourCompany_YourModule_Block_Options.

Quindi questo è ciò che la classe blocco sarà simile:

app / code / local / YourCompany / nomemodulo / blocchi / 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;
    }
}

Ora, il file modello:

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; ?>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top