OpenCart: Как установить значение опции по умолчанию в карточке товара (без «---Выберите---»)

OpenCart: Как установить значение опции по умолчанию в карточке товара (без «---Выберите---») При наличии опции на странице товара пользователю приходится обязательно выбирать какую-то опцию, иначе товар не отправляется в корзину. Как сделать, чтобы значение опции уже было выбрано (установилось по умолчанию какое-нибудь из предлагаемых опций)

В случае выпадающего списка (Drop-Down List)

Удалите или закомментируйте строку в файле /catalog/view/theme/<your template>/template/product/product.tpl:

...
<?php if ($points) { ?>
        <span class="reward"><small><?//php echo $text_points; ?> <?//php echo $points; ?></small></span> <br />
        <?php } ?>
        <?php if ($discounts) { ?>
        <br />
        <div class="discount">
          <?php foreach ($discounts as $discount) { ?>
          <?php echo sprintf($text_discount, $discount['quantity'], $discount['price']); ?><br />
          <?php } ?>
        </div>
        <?php } ?>
      </div>
      <?php } ?>
      <?php if ($options) { ?>
      <div class="options">
        <h2><?php echo $text_option; ?></h2>
        <br />
        <?php foreach ($options as $option) { ?>
        <?php if ($option['type'] == 'select') { ?>
        <div id="option-<?php echo $option['product_option_id']; ?>" class="option">
          <?php if ($option['required']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option['name']; ?>:</b><br />
          <select name="option[<?php echo $option['product_option_id']; ?>]" width="300px" style="width:300px;">
            <option value=""><?php echo $text_select; ?></option>
            <?php foreach ($option['option_value'] as $option_value) { ?>
...

То есть просто удалим первую предлагаемую строку "--- Выберите ---" до вызова цикла foreach по всем опциям, что выбрали для этого продукта. И теперь опция с меньшим порядком сортировки будет выбранной по умолчанию.

 

В случае радиокнопки (Radio Buttons) посложнее:

Там же в шаблоне товара /catalog/view/theme/<your template>/template/product/product.tpl заменить надо кусок кода:

        <?php if ($option['type'] == 'radio') { ?>
        <div id="option-<?php echo $option['product_option_id']; ?>" class="option">
          <?php if ($option['required']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option['name']; ?>:</b><br />
          <?php foreach ($option['option_value'] as $option_value) { ?>
          <input type="radio" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option_value['product_option_value_id']; ?>" id="option-value-<?php echo $option_value['product_option_value_id']; ?>" />
          <label for="option-value-<?php echo $option_value['product_option_value_id']; ?>"><?php echo $option_value['name']; ?>
            <?php if ($option_value['price']) { ?>
            (<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)
            <?php } ?>
          </label>
          <br />
          <?php } ?>
        </div>
        <br />
        <?php } ?>


на

        <?php if ($option['type'] == 'radio') { ?>
        <div id="option-<?php echo $option['product_option_id']; ?>" class="option">
          <?php if ($option['required']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option['name']; ?>:</b><br />
      <?php
      $i = 0;
      $len = count($option['option_value']);
      foreach ($option['option_value'] as $option_value) {
       if ($i == 0) {?>
           <input type="radio" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option_value['product_option_value_id']; ?>" id="option-value-<?php echo $option_value['product_option_value_id']; ?>" checked/>
             <label for="option-value-<?php echo $option_value['product_option_value_id']; ?>"><?php echo $option_value['name']; ?>
            <?php if ($option_value['price']) { ?>
            (<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)
            <?php } ?>
             </label>
             <br />   
       <?php } else { ?>
             <input type="radio" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option_value['product_option_value_id']; ?>" id="option-value-<?php echo $option_value['product_option_value_id']; ?>" />
             <label for="option-value-<?php echo $option_value['product_option_value_id']; ?>"><?php echo $option_value['name']; ?>
            <?php if ($option_value['price']) { ?>
            (<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)
            <?php } ?>
             </label>
             <br />
       <?php }
          $i++;
      }?>
      </div>
        <br />
        <?php } ?>

Все опции radio button формируются циклом foreach. Считаем элементы в массиве опций и первому элементу дописываем "checked" в input. Все следующие элементы без checked.

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:

Комментарии (2)     Подпишитесь на RSS комментариев к этой статье.

2 комментариев

#692
Alex говорит:
October 29, 2012 at 01:26 pm
На 1.5.3.1 данный способ не работает
#1384
Mihail говорит:
June 22, 2015 at 02:53 pm
Этот способ работает!
И на 1.5.3.1 тоже всё прекрасно работает!

Ещё можно к этому всему сделать так <div class="options" style="display: none;">
 в файле /catalog/view/theme/<Ваше тема>/template/product/product.tpl, и навсегда забыть про вывод заполнения опций :))