将数量更改为产品页面上的下拉
-
16-10-2019 - |
题
如何将数量文本输入框更改为可配置产品的下拉框架?
我在我的/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; ?>