数量を製品ページのドロップダウンに変更します
-
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」のみが表示されます。 (設定可能な製品自体に在庫がないため)
私が見た このstackexchangeページ, 、しかし、私が望むものにそれを適応させることができませんでした。
編集:これがユースケースです -
4つのサイズのブーツを用意しているとします。
ブーツ:
サイズ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
.
だから、これはあなたのブロッククラスがどのように見えるかです:
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; ?>