Опция. Если не в наличии, то мутный фон и невозможно выбрать её.

Тема в разделе "Общие вопросы", создана пользователем and798541dna, 22 май 2022.

  1. and798541dna

    and798541dna Новичок

    Сообщения:
    21
    Симпатии:
    0
    Здравствуйте, уважаемые форумчане.
    Подскажите пожалуйста, что не тая я делаю.
    Допустим есть товар и у него доступно 3 опции цвета в качестве картинок. Хочу, чтобы все возможные опции отображались, но если какой то опции нет в наличии (<=0), то она была перечёркнута и её невозможно было выбрать.
    1) В файле product.php добавил/исправил (выделил красным цветом)
    foreach ($option['option_value'] as $option_value) {
    if (!$option_value['subtract'] {
    if ((($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) && (float)$option_value['price']) {
    $price = $this->currency->format($this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));
    } else {
    $price = false;
    }

    $option_value_data[] = array(
    'product_option_value_id' => $option_value['product_option_value_id'],
    'option_value_id' => $option_value['option_value_id'],
    'quantity' => $option_value['quantity'],
    'name' => $option_value['name'],
    'image' => $this->model_tool_image->resize($option_value['image'], 80, 80),
    'price' => $price,
    'price_prefix' => $option_value['price_prefix']
    2) В файле product.tpl добавил/исправил (выделил красным цветом)
    <?php if ($option['type'] == 'image') { ?>
    <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 />
    <table class="option-image">
    <?php foreach ($option['option_value'] as $option_value) { ?>
    <tr>
    <td style="width: 1px;"><input <?php if ($option_value['quantity'] < 1) { ?> disabled <?php } ?> 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']; ?>" /></td>
    <td><label for="option-value-<?php echo $option_value['product_option_value_id']; ?>"><img src="<?php echo $option_value['image']; ?>" alt="<?php echo $option_value['name'] . ($option_value['price'] ? ' ' . $option_value['price_prefix'] . $option_value['price'] : ''); ?>" /></label></td>
    <td><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></td>
    </tr>
    <?php } ?>
    </table>
    </div>
    <br />
    <?php } ?>

    При внесении данных исправлений, сайт полностью слетает.
     
  2. Shureg

    Shureg Пользователь

    Сообщения:
    71
    Симпатии:
    16
    Потому что внимательней надо быть. И используйте какой нить нормальный IDE или хотя бы редактор с плагинами проверки.
    Сравните как у вас:
    if (!$option_value['subtract'] {

    И как должно быть
    if (!$option_value['subtract']){
     
  3. and798541dna

    and798541dna Новичок

    Сообщения:
    21
    Симпатии:
    0
    Если Вы имеете ввиду убрать пробел перед фигурной скобкой, то нет, это не помогло.
     
  4. and798541dna

    and798541dna Новичок

    Сообщения:
    21
    Симпатии:
    0
    Вот оригинал

    HTML:
                        foreach ($option['option_value'] as $option_value) {
                            if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) {
                                if ((($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) && (float)$option_value['price']) {
                                    $price = $this->currency->format($this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));
                                } else {
                                    $price = false;
                                }
                                
                                $option_value_data[] = array(
                                    'product_option_value_id' => $option_value['product_option_value_id'],
                                    'option_value_id'         => $option_value['option_value_id'],
                                    'name'                    => $option_value['name'],
                                    'image'                   => $this->model_tool_image->resize($option_value['image'], 80, 80),
                                    'price'                   => $price,
                                    'price_prefix'            => $option_value['price_prefix']
    HTML:
            <?php if ($option['type'] == 'image') { ?>
            <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 />
              <table class="option-image">
                <?php foreach ($option['option_value'] as $option_value) { ?>
                <tr>
                  <td style="width: 1px;"><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']; ?>" /></td>
                  <td><label for="option-value-<?php echo $option_value['product_option_value_id']; ?>"><img src="<?php echo $option_value['image']; ?>" alt="<?php echo $option_value['name'] . ($option_value['price'] ? ' ' . $option_value['price_prefix'] . $option_value['price'] : ''); ?>" /></label></td>
                  <td><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></td>
                </tr>
                <?php } ?>
              </table>
            </div>
     
  5. and798541dna

    and798541dna Новичок

    Сообщения:
    21
    Симпатии:
    0
    Прошу прощения. Не заметил, что не закрыл скобку.
    Исправил на так: if (!$option_value['subtract']){
    Опции не появляются совсем
     
  6. Shureg

    Shureg Пользователь

    Сообщения:
    71
    Симпатии:
    16
    Кроме внимательности, хорошо бы понимать, что вы правите.
    В данном случае вы поставили для появления опций условие "вычитание со склада отключено". Если оно у вас включено (а по дефолту так и настроено), то опции не появятся вообще. Хотите, чтобы были без условий - уберите этот if совсем, примерно так:

    foreach ($option['product_option_value'] as $option_value) {

    if ((($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) && (float)$option_value['price']) {
    $price = $this->currency->format($this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax') ? 'P' : false), $this->session->data['currency']);
    } else {
    $price = false;
    }

    $product_option_value_data[] = array(
    'product_option_value_id' => $option_value['product_option_value_id'],
    'option_value_id' => $option_value['option_value_id'],
    'quantity' => $option_value['quantity'],
    'name' => $option_value['name'],
    'image' => $option_value['image'] ? $this->model_tool_image->resize($option_value['image'], 50, 50) : '',
    'price' => $price,
    'price_prefix' => $option_value['price_prefix']
    );

    }
     
  7. and798541dna

    and798541dna Новичок

    Сообщения:
    21
    Симпатии:
    0
    Нет, всё равно не то, что я хотел.
    Давайте ещё раз постараюсь объяснить.

    Есть товар.
    В товаре есть опции в виде изображений (например красный, синий и чёрный).
    Так вот, если в одной из опций (например синий) стоит количество 0, то эта опция не выводится в карточке товара.
    А я хочу, чтобы выводились все опции, независимо от количества. Но если у какой-то опции количество <=0, то её нельзя было выбрать и изображение, по возможности, было мутным.
     
  8. and798541dna

    and798541dna Новичок

    Сообщения:
    21
    Симпатии:
    0
    Здравствуйте.
    Помогите пожалуйста решить мою проблему кто нибудь...
     
  9. Friends - Мошенник

    Friends - Мошенник Новичок

    Сообщения:
    14
    Симпатии:
    0
    Пишите контакты в лс помогу платно
     
  10. SiteMix

    SiteMix Продвинутый пользователь

    Сообщения:
    1.021
    Симпатии:
    174
    Точно не помню, но вроде бы в модуле "Связанные опции" именно такая реализация. Поищите, поинтересуйтесь у разработчика.
     
  11. and798541dna

    and798541dna Новичок

    Сообщения:
    21
    Симпатии:
    0
    Кинул меня этот мошенник на 1000 р.
    Ну ничего, не долго ему осталось бегать. Думал так просто всё закончится??? Не угадал.
    Дружок, я знаю, что ты читаешь эту тему. Либо верни деньги, либо дела у тебя будут плохи. Обещаю.
     
  12. Alexzz

    Alexzz Новичок

    Сообщения:
    2
    Симпатии:
    0
    Боже на сколько вы глупые люди правда, есть гарант на форуме через него работайте не будет проблем, ничего ему не будет люди на 10 милиион кидаю ничего не делаю
     
  13. zema50

    zema50 Продвинутый пользователь

    Сообщения:
    835
    Симпатии:
    94
    в контроллере меняете
    if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) {
    на
    if (!$option_value['subtract'])) {
    добавляете
    'quantity' => $option_value['quantity'],
    в tpl дописываете
    <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']; ?>"
    <?php if ($option_value['quantity']=='0') echo "disabled "; ?>/>
    все.
     
    Alexzz нравится это.
  14. and798541dna

    and798541dna Новичок

    Сообщения:
    21
    Симпатии:
    0
    Добрый день.
    Что-то так и не получается. Вношу изменения, указанные постом выше, страница товара совсем слетает.
    Может кто поможет сделать? За оплату естественно.
     
  15. Alezx - Мошенник

    Alezx - Мошенник Новичок

    Сообщения:
    13
    Симпатии:
    1
    Файл скиньте вечером дома буду, сделаю скину суда. Насчёт оплаты после проверки.
     
  16. and798541dna

    and798541dna Новичок

    Сообщения:
    21
    Симпатии:
    0
    Хорошо.
    И стоимость напишите в личку.
     

    Вложения:

    • product.php
      Размер файла:
      25,9 КБ
      Просмотров:
      4
    • product.tpl
      Размер файла:
      29,7 КБ
      Просмотров:
      3
  17. Pie

    Pie Активный пользователь

    Сообщения:
    121
    Симпатии:
    28
    Оно не будет так работать, чтобы такой подход заработал нужно сделать вот так
    if (!$option_value['subtract'] || ($option_value['quantity'] > 0) || ($option_value['quantity'] <= 0)) {
    что то костыль, что это костыль
     
  18. zema50

    zema50 Продвинутый пользователь

    Сообщения:
    835
    Симпатии:
    94
    обоснуйте ))) почему не должно так работать )))
     
  19. Pie

    Pie Активный пользователь

    Сообщения:
    121
    Симпатии:
    28
    ну так вы совет дали, вы и думайте почему не будет работать)
    если мне память не изменяет, при таком подходе вообще опций видно не будет
     
    Последнее редактирование: 7 июн 2022
  20. Pie

    Pie Активный пользователь

    Сообщения:
    121
    Симпатии:
    28
    вот мод простой, должно помочь
     

    Вложения:

    • opt.ocmod.xml
      Размер файла:
      1 КБ
      Просмотров:
      4
    Alezx - Мошенник нравится это.