如何将数量文本输入框更改为可配置产品的下拉框架?

我在我的/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; ?>

这对于简单产品很好,显示了1个库存的许多物品。但是在可配置的产品上,它仅在下拉列表中显示“ 1”。 (可能是因为可配置的产品本身没有库存)

我看见 此stackexchange页面, ,但无法适应我想要的东西。

编辑:这是用例 -

假设我有四个尺寸的靴子。

靴子:
尺寸6-3对
尺寸7-2对
尺寸8-1对
尺寸9-4对

当我选择“尺寸6”时,我希望数量下拉为1-3。如果我选择9号,则应达到4。

有帮助吗?

解决方案

第一件事是第一件事:

  • 目前,您当前的代码正在重新查询数据库,以获取有关循环的每次迭代的库存信息。不要打电话 Mage::getModel 在循环... 曾经
  • 考虑到这一点,您可能也不想要求Magento在模板文件中获取模型。因此,您可能想在块中添加一些方法,以获取数据库中可用的最大数量,然后 停止创建 <option>s 当您达到限制时.

假设以上是真的 您应该使用自定义块创建自定义模块。您当前编辑的模板文件应进行修改以进行读取:

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

然后在您的布局XML(可能是local.xml)中,您必须定义该别名块:

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

请注意我们使用了 yourcompany/options 那里 - 应该映射到您的自定义模块的块类名称选项。因此,完整的班级路径(至少在此示例中)将是类似的 YourCompany_YourModule_Block_Options.

因此,这就是您的Block类的样子:

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

现在,您的模板文件:

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; ?>
许可以下: CC-BY-SA归因
scroll top