Frage

Wie ändere ich die Menge text-Eingabe-Feld zu einer dropdown-auf konfigurierbare Produkte?

Ich habe dieses Stück code in meinem /catalog/product/view/addtocart.phtml-Datei

 <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; ?>

Dies funktioniert gut für die einfachen Produkte, zeige 1 bis jedoch viele Elemente, die ich auf Lager haben.Aber auf einem konfigurierbaren Produkt, es wird nur " 1 " in der dropdown-Liste.(wahrscheinlich, weil das konfigurierbare Produkt selbst nicht haben Inventar)

Ich sah dieser stackexchange-Seite,, aber noch nicht in der Lage, anpassen es zu dem, was ich will.

Edit:Hier ist ein use - case -

Sagen, ich habe die Stiefel in vier Größen erhältlich.

Stiefel:
Größe 6 - 3 paar
Größe 7 - 2 Paare
Größe 8 - 1 paar
Größe 9 - 4 Paare

Wenn ich die Option "Größe 6," würd ich gern die Menge dropdown-Liste werden 1-3.Wenn ich wählen Größe 9, sollte es gehen bis zu 4.

War es hilfreich?

Lösung

Erste, was ist zuerst:

  • Derzeit Ihre aktuelle code ist re-Abfragen an die Datenbank für die Inventarisierung Informationen, die bei jeder iteration der Schleife.Don ' T call Mage::getModel in einer Schleife... je
  • Mit dem im Verstand, Sie wollen wahrscheinlich nicht zu Fragen, Magento, um ein Modell in der Vorlage-Datei.So werden Sie wahrscheinlich wollen, fügen Sie einige Methode, um Ihren block, um die maximal verfügbare Menge in die Datenbank und dann stop erstellen <option>s wenn Sie diese Grenze erreichen.

Vorausgesetzt, die oben genannten gilt erstellen Sie ein benutzerdefiniertes Modul mit einem benutzerdefinierten block.Die template-Datei, die Sie gerade Bearbeiten geändert werden sollte, zu Lesen, wie solche:

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

Dann in Ihrem layout-xml (evtl. local.xml) müssen Sie festlegen, dass alias block:

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

Beachten Sie, dass wir verwendet yourcompany/options es sollte anzeigen, um Ihr benutzerdefiniertes Modul, block Klasse mit dem Namen Optionen.Also der Klasse path (zumindest für dieses Beispiel) wäre so etwas wie YourCompany_YourModule_Block_Options.

Dies ist es, was den block der Klasse Aussehen würde:

app/code/local/YourCompany/YourModule/Block/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;
    }
}

Nun, Ihre template-Datei:

app/design/frontend/base/default/template/Origin/Optionen.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; ?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top