Изменить количество на раскрывающуюся страницу продукта

magento.stackexchange https://magento.stackexchange.com/questions/14795

  •  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; ?>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top