Округление цены до тысячных в Minishop2?

Нужно в minishop2 сделать округление цены до тысячных. например 1.431
Пробовал уже все, что мог)) добился того, что цену вписать могу, а после сохранения, он сам округляет её((
В product.common.js пробовал:
price: {
                xtype: 'numberfield',
                decimalPrecision: 4,
                description: '<b>[[+price]]</b><br />' + _('ms2_product_price_help')
            },
decimalPrecision: 4 — изменил на 4

ms2_price_format — менял — "[5, ",", " "]"

В getlist.class.php тоже пробовал менять, как в этом "посту"

Как же победить?). Если создавать свое поле, оно явно не будет работать в корзине корректно.
Дмитрий
05 февраля 2021, 23:51
modx.pro
935
0

Комментарии: 15

Артур Шевченко
05 февраля 2021, 23:56
0
выставил тип decimal(12,3) и в настройках прописал формат.
Сделали? Кроме исправления getlist.class.php
    Дмитрий
    06 февраля 2021, 04:56
    0
    А это где именно?
    Я нашел только в minishop2.mysql.schema.xml
    <field key="price" dbtype="decimal" precision="12,2" phptype="float" null="true" default="0"/>
    Поменял на 12,4)) что то не сработало!)
      Дмитрий
      06 февраля 2021, 05:30
      0
      Только теперь на выходе округляет, куда рыть?) В админке: 0.4398 | в товаре: 0.4400
      Пробовал выставить ms2_price_format_no_zeros — Нет, ну так он округлил все равно и добавил лишние нули))

      А в админке получилось выставить даже «десятитысячный» формат, после того как в Бд выставил свои значения, за что Вам огромное спасибо)!))
        Дмитрий
        06 февраля 2021, 09:15
        0
        В /assets/components/minishop2/js/web/default.js нашел такое, оно?:
        miniShop2.Utils = {
                empty: function (val) {
                    return (typeof(val) == 'undefined' || val == 0 || val === null || val === false || (typeof(val) == 'string' && val.replace(/\s+/g, '') == '') || (typeof(val) == 'object' && val.length == 0));
                },
                formatPrice: function (price) {
                    var pf = miniShop2Config.price_format;
                    price = this.number_format(price, pf[0], pf[1], pf[2]);
        
                    if (miniShop2Config.price_format_no_zeros && pf[0] > 0) {
                        price = price.replace(/(0+)$/, '');
                        price = price.replace(/[^0-9]$/, '');
                    }
        
                    return price;
                },
        Т.е. в админке теперь всё норм, даже сохраняет. А на самом сайте, например в корзине — округляет))
          Артур Шевченко
          06 февраля 2021, 13:04
          -1
          Закомментируйте этот кусок кода посмотрите, что будет.
          formatPrice: function (price) {
                      var pf = miniShop2Config.price_format;
                      price = this.number_format(price, pf[0], pf[1], pf[2]);
          
                      if (miniShop2Config.price_format_no_zeros && pf[0] > 0) {
                          price = price.replace(/(0+)$/, '');
                          price = price.replace(/[^0-9]$/, '');
                      }
          
                      return price;
                  },
            Дмитрий
            06 февраля 2021, 13:16
            0
            В таком случае он просто перестает считать общую сумму. Ради интереса попробовал вообще убрать default.js, относительно работает, но сумму так же в корзине округляет 0.4400, хотя в БД 0.4389 и в админке тоже правильно))
            Такое ощущение, что берет из Бд, хотя я уже везде там выставил у cost и price decimal(12,4) ((
            Есть еще версии?)
              Артур Шевченко
              06 февраля 2021, 13:20
              -1
              Сделайте так
              formatPrice: function (price) {
                          return price;
                      },
                Дмитрий
                06 февраля 2021, 13:42
                0
                В Итого Стоимость убрались нули)) т.е. опять до сотых))
                Так как я пробовал отключать /assets/components/minishop2/js/web/default.js, наверное дело не в скрипте(( Либо внутренность плагина minishop, либо в БД...((
                    Дмитрий
                    06 февраля 2021, 14:52
                    0
                    Попробовал, кеш почистил, не получилось))
                    array (
                          'dbtype' => 'decimal',
                          'precision' => '12,4',
                          'phptype' => 'float',
                          'null' => true,
                          'default' => 0.0,
                        ),

                    В админке цена так:
                    В корзине так:

                    Округляет последние 2 цифры и всё… Накинули версию, что возможно CSS, но прям сомнения.((
                      Алексей Смирнов
                      06 февраля 2021, 15:24
                      0
                      Судя по всему у вас округление или в шаблоне или феноме или плагин какой-то еще отрабатывает и приводит все к этим делам. Может, плагин на добавление товара в корзину. Но скорее всего нужно смотреть на плагины и сам код добавления товара в корзину, по-моему там где то видел как раз 2 после зпт в ручную. если не ошибаюсь.
                        Дмитрий
                        06 февраля 2021, 15:45
                        0
                        Тестирую на пустом шаблоне, скорее всего плагины. Конечно автор хорошо спрятал, что аж не знаю куда лезть
                        Дмитрий
                        06 февраля 2021, 16:24
                        0
                        Причем заметил, в самом товаре выводит нормально (через [[+price]]), а в корзине округляет {$product.price}
                        Евгений Webinmd
                        06 февраля 2021, 18:42
                        0
                        в системных настройках же меняли формат числа? ключ ms2_price_format
                        Дмитрий
                        06 февраля 2021, 18:50
                        0
                        Да, все таки очень странно. На странице товара реально выводит нормально: 0,4398, через [[+price]]
                        А в корзине округляет в такой формат: 0.4400 через {$product.price}
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    15