[Решено] Скрыть модуль, если цена товара меньше 2000

Тема в разделе "OpenCart", создана пользователем cereberlum, 26 окт 2015.

  1. cereberlum

    cereberlum

    Регистрация:
    26 май 2013
    Сообщения:
    756
    Симпатии:
    269
    Суть в том, что на странице товара выводится модуль, который позволяет сделать мгновенный заказ (SuperQuickCheckout). Модуль выводится в колонке, никак не могу придумать, как бы можно было его скрывать его, если цена товара меньше 2000р например. Может у кого-то есть мысли?
     
  2. Lena_&9

    Lena_&9

    Регистрация:
    23 фев 2014
    Сообщения:
    71
    Симпатии:
    98
    <?php if($price >= 2000) { ?>
    код модуля (при необходимости перенести с файла .xml)
    <?php } ?>
     
    cereberlum нравится это.
  3. fanton123

    fanton123

    Регистрация:
    24 дек 2012
    Сообщения:
    279
    Симпатии:
    31
    Для начала возможно потребуется очистить переменную $price от лишних данных(пробелов и приставок валютных).
    Я делал так:
    Код:
    <?php $price2 = (float) $price;  ?>
     
    cobalt и cereberlum нравится это.
  4. cereberlum

    cereberlum

    Регистрация:
    26 май 2013
    Сообщения:
    756
    Симпатии:
    269
    ага, именно так и есть, цена у меня имеет пробелы и значение валюты и условие из-за этого не работает. (float) $price не совсем помогает, вот примеры цен 18.00 (восемнадцать), 400.00 (четыреста), 1 200.00 (тысяча двести), 18 000.00 (восемнадцать тысяч). Значения (float) $price для приведенных цен будут 18, 400, 1, 18 - т.е. фактически до первого разделителя.
     
  5. Lena_&9

    Lena_&9

    Регистрация:
    23 фев 2014
    Сообщения:
    71
    Симпатии:
    98
    А если обрезать ?
    preg_replace('/[^0-9]/', '',$price);
    только надо правильно составить регулярку
     
    fanton123 и cereberlum нравится это.
  6. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Не надо так извращаться! Надо просто из контроллера дополнительно вывести чистую не отформатированную цену и проверять её.

    Только это всё не решает вопрос, как доступ к этой цене получить из колонки.
    Единственное, что мне приходит в голову, это отдельно в контроллере колонки читать из ссылки id товара и доставать его цену из базы.
     
    cereberlum нравится это.
  7. cereberlum

    cereberlum

    Регистрация:
    26 май 2013
    Сообщения:
    756
    Симпатии:
    269
    можно скрыть через display:none не самое элегантное решение, но как вариант. Решение с правкой контроллера и получением цены товара в его контроллере напрашивается, конечно. но мне оно кажется замороченным.
     
  8. chukcha

    chukcha

    Регистрация:
    9 окт 2014
    Сообщения:
    448
    Симпатии:
    119
    1. product.php - контроллер
    там где,
    $this->data['price'] = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));
    добавляем
    $this->config->set('price_value',$product_info['price']);
    2. в модуле, где нужно проверить
    if ( $this->config->get('price_value') {
    выводим модуль
    }

    Вот приблизительное решение...
     
    cereberlum и Dotrox нравится это.
  9. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Я думал о подобном решении, но думал о сохранении в сессию, а это требует уже каких-то уникальных ключей, чтоб количество между товарами не перепуталось, плюс просто забивает сессию хламом. Как-то я упустил, что в конфиге эта проблема решается сама собой путём стирание из него при каждом запросе всего, что было добавлено через сеттер (точнее, пересоздания без этих данных). Думаю, это наилучшее решение.
     
  10. fanton123

    fanton123

    Регистрация:
    24 дек 2012
    Сообщения:
    279
    Симпатии:
    31
    У меня работает, потому что цена целочисленная и без пробелов. Вообще на мой взгляд лучше делать ценны целочиленными, ценники типа 9.99 лично меня раздражаю очень. А пробел можно убрать регуляркой как уже написали.
     
    cobalt нравится это.