Формат поля Цена в Админке

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

  1. P@TROL

    P@TROL Новичок

    Сообщения:
    4
    Симпатии:
    0
    Читал, теперь все нормально... Спасибо.

    Подытожим... ocStore 2.3.0.2.3:

    Открываем admin/controller/catalog/product.php

    Ищем:
    Код:
    'price'      => $result['price'],
    Заменяем на:
    Код:
    'price'      => round($result['price'], 2),
    Ищем:
    Код:
    'special'    => $special,
    Заменяем на:
    Код:
    'special'    => round($special, 2),
     
  2. ivtro

    ivtro Новичок

    Сообщения:
    5
    Симпатии:
    0
    Всем привет! Подскажите, пожалуйста, решение - убрать 0000 после запятой в цене, оставив только значение в рублях для ОС 3. Приведенный здесь вариант не помог...
     
  3. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    потому что в приведенном варианте задается 2 знака после запятой
    если округлить до целого
    PHP:
    'price'      => round($result['price'])
     
  4. ivtro

    ivtro Новичок

    Сообщения:
    5
    Симпатии:
    0
    В листинге цена правильная, без копеек. Но в карточке товара цена отображается с четырьмя нулями после запятой. Соответственно, в тайтле и описании цена тоже указывается с четырьмя нулями после запятой. Пробовал и два знака оставить и как вы говорите...не получается...
    Причем в admin/controller/catalog/product.php два раза встречается $result['price']. Менял и и по одному и два... Что не так делаю?
     
  5. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    при добавлении\редактировании товара отрабатывает метод getForm()
    c ценой работает код
    PHP:
            if (isset($this->request->post['price'])) {
                
    $data['price'] = $this->request->post['price'];
            } elseif (!empty(
    $product_info)) {
                
    $data['price'] = $product_info['price'];
            } else {
                
    $data['price'] = '';
            }
     
  6. ivtro

    ivtro Новичок

    Сообщения:
    5
    Симпатии:
    0
    я правильно понял, что в admin/controller/catalog/product.php ничего менять не нужно?
    округлять цену нужно в нём?
    Прошу прощения за глупые вопросы...
     
  7. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    да
     
  8. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    но там же еще цены - скидок, акций, опций
    или вам только основную цену товара?
     
  9. ivtro

    ivtro Новичок

    Сообщения:
    5
    Симпатии:
    0
    т.е. все шесть 'price' меняем на round($result['price']), как на скрине?
     

    Вложения:

  10. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    нет.
    я смотрю, у вас нет ни малейшего представления о php
    нафига вы лезите в код. может заплатить кому?
    заменить нужно $product_info['price'] на round($product_info['price'])
     
    ivtro нравится это.
  11. ivtro

    ivtro Новичок

    Сообщения:
    5
    Симпатии:
    0
    Да, не понимаю ничего в php, поэтому и спросил тут. Заменил, в карточке товара цена округлилась до целых рублей. Но в тайтле и описании товара, если она там есть, цена осталась с нулями. Стоит модуль Обновление МЕТА. Все равно спасибо большое за помощь!
     
  12. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    это уже другая песня
     
  13. Fortoons

    Fortoons Новичок

    Сообщения:
    11
    Симпатии:
    0
    Тема с четырьмя нулями давно обсуждают на форумах и предлагают разные решения,
    от смены формата в базе данных
    PHP:
    ALTER TABLE  `productCHANGE  `price`  `priceDECIMAL15NOT NULL DEFAULT  '0.0000';
    (DECIMAL(15, 2) - оставив только 2 нуля или DECIMAL(15, 0) - не оставив совсем нулей), до использования встроенных php функций (int), round(), number_format() и эти варианты тоже рабочие.

    Но нужно ведь учитывать, что к цене могут быть применены tax (наценки), к тому-же к цене может быть приклеена валюта (в которой исчисляется эта самая цена), валюта передаётся через сессию.

    И поэтому в самом ОС есть методы которые зачастую (не считая редких исключений) разумнее применять.

    Для начала нужно проверить в настройках ОС (Система->Локализации->Валюты->Десятичные знаки), сколько знаков после запятой вы хотите.
    Потом использовать встроенные методы:
    PHP:
    $price $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
    По сути метод $this->currency->format принимает 2 аргумента и если не хотите использовать tax, то достаточно будет сделать так, где вторым аргументом передать валюту:
    PHP:
    $price $this->currency->format($result['price'], $this->session->data['currency']);
     
    Последнее редактирование: 13 окт 2022