Отображение цены скидки в списке товаров

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

  1. DiMoss

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

    Сообщения:
    862
    Симпатии:
    236
    Доброго времени суток!

    Вывел в категории отображение цены discount. Показывает цену в таком формате - 190.0000
    Как убрать лишние 2 нуля. И ещё бы знак рубля добавить.

    P.S. Что то не могу понять как формируется отображение цены. Хочу убрать точку после знака рубля. Не могу найти шаблон отображения.
     
  2. Vlad

    Vlad Эксперт

    Сообщения:
    4.151
    Симпатии:
    1.004
    а вы посмотрите как правильно формировать цену в том же контроллере
    как то так
    PHP:
    $price $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));
    заодно и инструкцию сюда напишите ;-) как вывести скидки
     
  3. DiMoss

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

    Сообщения:
    862
    Симпатии:
    236
    Лады... Попробую написать инструкцию.

    1) В файлe catalog\controller\product\category.php после
    PHP:
    if ($this->config->get('config_review_status')) {
      
    $rating = (int)$result['rating'];
    } else {
       
    $rating false;
    }
    вставляем.....
    PHP:
    //Discounts
    $discounts_info $this->model_catalog_product->getProductDiscounts($result['product_id']);

    $discounts = array();

    foreach (
    $discounts_info as $discount) {
       
    $discounts[] = array(
           
    'quantity' => $discount['quantity'],
           
    'price'    => $this->currency->format($this->tax->calculate($discount['price'], $result['tax_class_id'], $this->config->get('config_tax')))
        );
    }
    2) В том же файле в массив $data['products'][] = array(, например после...
    PHP:
    'price'       => $price,
    вставляем
    PHP:
    'discounts'    => $discounts,
    'tax_class_id' => $result['tax_class_id'],
    В общем то теперь продукты категорий "знают" про скидки. И можно выводить их на витрину...

    На данный момент у меня отображение имеет такой вот вид 1 уп. (10 шт.) 190.0000/ шт. В идеале хотелось бы вот так - 1 уп. (10 шт.) 190.00 ₽ / шт.

    А шаблон выглядит вот так...

    3) В файле catalog\view\theme\default\template\product\category.tpl в "блоке" отображения цены
    PHP:
    <?php if ($product['price']) { ?>
    ........
    в нужное место вставляем
    PHP:
    <?php if ($product['discounts']) { ?>
      <ul>
        <?php foreach ($product['discounts'] as $discount) { ?>
          <li>
            <?php echo $text_discount?>
           (<?php echo $discount['quantity']; ?>
           <?php echo $text_piece ?>)
           <span><?php echo $discount['price']; ?></span> /
           <?php echo $text_piece ?>
          </li>
        <?php ?>
      </ul>
    <?php ?>
    !!!ОБРАЩАЮ ВАШЕ ВНИМАНИЕ на то, что в данном коде имеются переменные, которые необходимо добавить в файл перевода и в контроллер. Тут уж на вкус и цвет....

    Без премудростей оно как то так выглядит.... Наверное! Я если честно уже не помню)))...
    PHP:
    <?php if ($product['discount']) { ?>
      <ul>
        <?php foreach ($product['discount'] as $discount) { ?>
          <li>
           <?php echo $discount['quantity']; ?>
           <?php echo $discount['price']; ?>
          </li>
        <?php ?>
      </ul>
    <?php ?>
    Вроде бы ничего не забыл! А ведь мог...
    За основу взята инфа с другого сайта. Но там для более ранней версии двигла.
    Я делал на ocStore 2.1.0.1.

    Может кому будет полезно. Здесь в общем то понятно какие манипуляции проводил автор.
    Это если вдруг я чего забыл)))).
    PHP:
    <?xml version="1.0" encoding="UTF-8"?>
    <modification>
        <id>disc_in_cat</id>
        <version>1.0</version>
        <vqmver>2.3.2</vqmver>
        <author>[Baco]</author>
        <id>disc_in_cat</id>
        <version>2.0</version>
        <author>special for Impreza</author>
        <file name="catalog/view/theme/*/template/product/category.tpl">
            <operation>
                <search position="after"><![CDATA[
                    <?php echo $product['description']; ?></div>
                ]]></search>
                <add><![CDATA[
                      <?php if ($product['d']) { ?>
                        <br />
                        <div class="discount">
                          <?php foreach ($product['d'] as $discount) { ?>
                          <?php echo $text_opt?><?php echo $discount['quantity']; echo $text_po; echo $this->currency->format($this->tax->calculate($discount['price'], $product['tax_class_id'], $this->config->get('config_tax'))); ?><br />
                          <?php ?>
                        </div>
                    <?php ?>
                ]]></add>
            </operation>
            <operation>
                <search position="after"><![CDATA[
                    html += '  <div class="description">' + $(element).find('.description').html() + '</div>';
                ]]></search>
                <add><![CDATA[
                    var discount = $(element).find('.discount').html();
     
                if (discount != null) {
                    html += '    <div class="discount">' + discount + '</div>';
                }
                ]]></add>
            </operation>
            <operation>
                <search position="after"><![CDATA[
                   html += '<div class="description">' + $(element).find('.description').html() + '</div>';
                ]]></search>
                <add><![CDATA[
                    var discount = $(element).find('.discount').html();
     
                if (discount != null) {
                    html += '<div class="discount">' + discount + '</div>';
                }
                ]]></add>
            </operation>
        </file>

        <file name="catalog/controller/product/category.php">

            <operation>
                <search position="after"><![CDATA[
                if (isset($product_in_cart['key'])) $key = $product_in_cart['key'];
                ]]></search>
                <add><![CDATA[
                    //discounts_st
                    $discounts = $this->model_catalog_product->getProductDiscounts($result['product_id']);
     
                    $this->data['discounts'] = array();
     
                    foreach ($discounts as $discount) {
                        $this->data['discounts'][] = array(
                            'quantity' => $discount['quantity'],
                            'price'    => $this->currency->format($this->tax->calculate($discount['price'], $result['tax_class_id'], $this->config->get('config_tax')))
                        );
                    }
                    //discounts_end
                ]]></add>
            </operation>
            <operation>
                <search position="after"><![CDATA[
                    'price'       => $price,
                ]]></search>
                <add><![CDATA[
                    //Discount
                        'd'       => $this->model_catalog_product->getProductDiscounts($result['product_id']),
                        'tax_class_id' => $result['tax_class_id'],
                    //Discount
                ]]></add>
            </operation>
            <operation>
                <search position="after"><![CDATA[
                    $this->data['button_continue'] = $this->language->get('button_continue');
                ]]></search>
                <add><![CDATA[
                    //Discount
                    $this->data['text_opt'] = $this->language->get('text_opt');
                    $this->data['text_po'] = $this->language->get('text_po');
                    //Discount
                ]]></add>
            </operation>
        </file>

        <file name="catalog/language/russian/product/category.php">

            <operation>
                <search position="after"><![CDATA[
                   <?php
                
    ]]></search>
                <
    add><![CDATA[
                    
    $_['text_opt']       = 'Опт: ';
                    
    $_['text_po']       = ' по ';
                ]]></
    add>
            </
    operation>
        </
    file>
        <
    file name="catalog/language/english/product/category.php">

            <
    operation>
                <
    search position="after"><![CDATA[
                   <?
    php
                
    ]]></search>
                <
    add><![CDATA[
                    
    $_['text_opt']       = 'Opt: ';
                    
    $_['text_po']       = ' for ';
                ]]></
    add>
            </
    operation>
        </
    file>
        <
    file name="catalog/language/ukrainian/product/category.php">

            <
    operation>
                <
    search position="after"><![CDATA[
                   <?
    php
                
    ]]></search>
                <
    add><![CDATA[
                    
    $_['text_opt']       = 'Опт: ';
                    
    $_['text_po']       = ' по ';
                ]]></
    add>
            </
    operation>
        </
    file>
    </
    modification>
     
    Последнее редактирование: 20 дек 2017
    Romans нравится это.
  4. DiMoss

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

    Сообщения:
    862
    Симпатии:
    236
    С точкой после знака рубля разобрался - оно в настройках Валюта делается. Там же определяется и количество нулей после точки.
    Однако почему эти настройки не подцепляются к вышеописанному коду вывода скидки я не могу понять. Где то что то не так указал в формировании цены?
    PHP:
    'price' => $this->currency->format($this->tax->calculate($discount['price'], $result['tax_class_id'], $this->config->get('config_tax')))
    То бишь $result['tax_class_id'], $this->config->get('config_tax'))) не получают нужных результатов?
     
    Последнее редактирование: 3 фев 2019
  5. Vlad

    Vlad Эксперт

    Сообщения:
    4.151
    Симпатии:
    1.004
    скорей всего проблема в оксторе. Завтра проверю на русской сборке. Оксторе далека от оригинала, я ошибки там принципиально не ищу.
     
  6. Romans

    Romans Administrator Команда форума

    Сообщения:
    1.453
    Симпатии:
    787
    у вас ошибка вот этой части
    PHP:
    'discount'    => $this->model_catalog_product->getProductDiscounts($result['product_id']),
    вы напрямую подали данные из модели и хотите чтобы не было нулей? Так не пойдет.

    Посмотрите начала своей инструкции. Вот именно эти данные и надо выводить в шаблон т.е передавать в массив с товаром.
     
    DiMoss нравится это.
  7. DiMoss

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

    Сообщения:
    862
    Симпатии:
    236
    Вот что значит в тупую копировать чужой код))).

    Суть ошибки понял! Весьма благодарен! Исправил и всё заработало как надо!
    В инструкции тоже поправил....

    Правильное решение -
    PHP:
    'discount'    => $data['discounts'],
     
  8. EvgenD

    EvgenD Новичок

    Сообщения:
    12
    Симпатии:
    1
    Здравствуйте!

    а не подскажете как вывести значения конкретных цен со скидками от количества?

    т.е. не все вместе через такой код:

    <?php if ($product['discount']) { ?>
    <ul>
    <?php foreach ($product['discount'] as $discount) { ?>
    <li>
    <?php echo $text_discount; ?>
    (<?php echo $discount['quantity']; ?>
    <?php echo $text_piece ?>)
    <span><?php echo $discount['price']; ?></span> /
    <?php echo $text_piece ?>
    </li>
    <?php } ?>
    </ul>

    а именно по отдельности.

    т.е. при покупке 10, например, цену (указанную в карточке товара в админке) как вывести отдельно от остальных?

    наверняка же можно это сделать как-то, но решения в интернете пока не нашёл.
     
  9. EvgenD

    EvgenD Новичок

    Сообщения:
    12
    Симпатии:
    1
    разобрался! вот код:

    <?php foreach ($product['discounts'] as $discount) { ?> <?php if ($discount['quantity'] == 10) { ?> <?php echo $discount['price']; ?> <?php } ?> <?php } ?>
     
    Vlad нравится это.
  10. Vlad

    Vlad Эксперт

    Сообщения:
    4.151
    Симпатии:
    1.004
  11. EvgenD

    EvgenD Новичок

    Сообщения:
    12
    Симпатии:
    1
    ок, постараюсь в следующий раз.
     
  12. ramzes6961

    ramzes6961 Новичок

    Сообщения:
    19
    Симпатии:
    0
    Есть две цены, одна та что указывается в карточке товара, вторая создана в скидках для группы оптовики от 1 единицы.Нужно вывести для покупателей кто не в группе оптовики две цены,розничную и оптовую.как скидка не выводиться потому что другая группа покупателей при заходе на сайт.
    как будет выглядеть условия для вывода со скидкы группы оптовики с количеством 1???
    пробовал так с указанием id группы не помогло, да я и в php не особо разбераюсь(
    опенкарт 2.1.0.1
    Код:
    <?php foreach ($product['discounts'] as $discount) { ?> <?php if ($discount['product_discount[customer_group_id]'] == 2) { ?> <?php echo $discount['price']; ?> <?php } ?> <?php } ?>
     
    Последнее редактирование: 1 сен 2016
  13. Sacred13

    Sacred13 Новичок

    Сообщения:
    4
    Симпатии:
    2
    Opencart 2.2.0.0

    В настройках "Система" - "Локализация" - "Валюта" - в валюте по умолчанию (в данном случае это американский доллар) установил в пункте "Количество знаков после запятой" значение равное "7".

    Такая настройка позволила мне устанавливать цены в виде: 0.0000800

    И вот что странно, с ценной все отлично, но как только я добавляю скидку для товара (указываю цену в товаре для определенной группы пользователей), к примеру: 0.0000700, после сохранения товара, в строке скидки, в поле "цена" значение округляется до "0.0001".

    Я так понимаю, что где-то в контролере в настройках скидки установлено значение до "4" (формат по умолчанию)?

    Подскажите пожалуйста, в каком месте нужно внести изменения чтобы скидка учитывала настройки валюты? Заранее спасибо.
     
  14. Ecsiron

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

    Сообщения:
    414
    Симпатии:
    53
    Я в этом сомневаюсь.
    По существу могу показать следующий факт.
    Редактирую модуль заказы, привел его к подобию, как в 1С.
    Фильтры спрятал и название валюты вывел с комментарием, но не о том речь)
    В графе Итого у меня теперь 2895.7603, заглядываю в базу данных (oc_order_total) и вижу:
    value decimal(15,4), намек понятен?

    ЗЫ oc_product_discount - price decimal(15,4)
    и т.д. Это уже констатация фактов.
     
    Sacred13 нравится это.
  15. Sacred13

    Sacred13 Новичок

    Сообщения:
    4
    Симпатии:
    2
    Спасибо, помогло. Но вообще странно если честно :(
     
    Ecsiron нравится это.
  16. f4rr3ll1990

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

    Сообщения:
    34
    Симпатии:
    1
    Ребят, а подскажите как вывести скидку в админке в списке товаров?
     
  17. Gromy

    Gromy Новичок

    Сообщения:
    7
    Симпатии:
    0
    Вопрос и у меня теперь:
    Сделал по инструкции - но цену не выводит.
    версия ocstore 2.1.0.2.1

    <?php if ($product['discounts']) { ?>
    <ul>
    <?php echo 1; ?> ----> вход в условие не происходит
    <?php foreach ($product['discounts'] as $discount) { ?>
    <li>
    <?php echo $discount['price']; ?>
    <?php echo 1; ?> ------> входа в цикл нет
    </li>
    <?php } ?>
    </ul>
    <?php } ?>

    Скажите, куда копать можно?
     
    Последнее редактирование: 14 май 2017
  18. karpov

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

    Сообщения:
    1.524
    Симпатии:
    243
    кеш модификаторов обновили? Сам дисконт отображается то?
     
  19. Gromy

    Gromy Новичок

    Сообщения:
    7
    Симпатии:
    0

    На форумах пишут, что это работает только для валюты USD, как приспособить к RUB?
     
  20. Gromy

    Gromy Новичок

    Сообщения:
    7
    Симпатии:
    0
    кэш обновил, как первую строку переменной $product['discounts'] можно вывести? я в php неочень силен, только осваиваюсь