Изменить количество на раскрывающуюся страницу продукта
-
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>
с Когда вы достигнете этого предела.
Предполагая, что вышеперечисленное верно Вы должны создать пользовательский модуль с пользовательским блоком. Файл шаблонов, который вы в настоящее время редактируете, должен быть изменен для чтения как таковой:
<?php echo $this->getChildHtml('quantityoptionsdropdown');?>
Затем в вашем макете xml (возможно, локальный.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; ?>