[OpenCart 2.0.3.1] Странная проблема с разделителем цены

skoch
На сайте с 04.08.2008
Offline
152
5248

Вместо разделителей прописанных в языковом файле, выводи «111t111t111d00» (прикрипил скриншот)

В языковом файле прописано:

$_['decimal_point'] = ',';

$_['thousand_point'] = '.';

Помогите решить проблему

WordPress Changelog (https://wordpress.org/plugins/wp-changelog/) - Или когда с вашим сайтом что-то пошло не так
WooCommerce Product Request (https://wordpress.org/plugins/woo-product-request/) - Покупка в один клик
Ragnarok
На сайте с 25.06.2010
Offline
239
#1

skoch, что если поменять в языковом файле . и ,? Поменять на другие символы?

//TODO: перестать откладывать на потом
skoch
На сайте с 04.08.2008
Offline
152
#2
Ragnarok:
skoch, что если поменять в языковом файле . и ,? Поменять на другие символы?

Ничего не изменилось, пробовал.

В базе цена записана нормально 1000.000

Ragnarok
На сайте с 25.06.2010
Offline
239
#3
skoch:
Ничего не изменилось, пробовал.

В базе цена записана нормально 1000.000

значит проследите путь, языковой файл, шаблон, контроллер. где-то там что-то не то. найдите функцию, которая добавляет

K
На сайте с 03.06.2015
Offline
45
#4

Корзину же js считает, и тоже как сервер, или там сервер умножает?

Кстати грамотно будет не thousand_point а thousand_sep (separator), потому что точка-запятая математический знак, а разделитель тысячных разрядов - дизайн.

MYSQL PHP JS HTML CSS SEO TXT США СССР
skoch
На сайте с 04.08.2008
Offline
152
#5
Ragnarok:
значит проследите путь, языковой файл, шаблон, контроллер. где-то там что-то не то. найдите функцию, которая добавляет

Вроде нашел откуда проблема.

Файл

/system/library/currency.php

Есть такой код:


if ($format) {
$decimal_point = $this->language->get('decimal_point');
} else {
$decimal_point = '.';
}

if ($format) {
$thousand_point = $this->language->get('thousand_point');
} else {
$thousand_point = '';
}

$string .= number_format(round($value, (int)$decimal_place), (int)$decimal_place, $decimal_point, $thousand_point);

Если вывести $decimal_point или $thousand_point то увидим просто текстом decimal_point или thousand_point

Если вывести $string, то видим тот бред что в стартопике.

Как вариант можно заменить $this->language->get('decimal_point') и $this->language->get('thousand_point') но это самый простой вариант и не лучший.

Если нужно будет изменить разделители, нужно будет искать где заменять(через пол года тяжело будет вспомнить где что в коде менялось).

Ищу почему не цепляет из языкового файла

K
На сайте с 03.06.2015
Offline
45
#6
skoch:
Если вывести $string, то видим тот бред что в стартопике.

Это не бред, number_format() берет ровно 1 символ из строки, первый надо полагать.

---------- Добавлено 23.07.2015 в 11:34 ----------

skoch:
Если нужно будет изменить разделители

Не нужно будет если сделаете . и пробел для дизайна тысяч. В РФ, я проверял, нет стандарта на символ разделителя десятичной дроби, а пробел он и в Африке пробел - никому не мешает. Я так сделал помучившись с попытками наладить индустриальный вывод через локаль и горя с тех пор не знаю.

skoch
На сайте с 04.08.2008
Offline
152
#7
kostyanet:
Это не бред, number_format() берет ровно 1 символ из строки, первый надо полагать.

Это понятно.

Бред в том что цена выводиться в формате «111t111t111d00»

K
На сайте с 03.06.2015
Offline
45
#8

Надо $value вывести, без формата.

---------- Добавлено 23.07.2015 в 11:57 ----------

ЗЫ Я видел коды опенкарт в период осмотра что уже написано. Старье конечно, несусветное и сидеть под этим моросящим дождем из переменных которые кочуют из инклюды в инклюду глобально вообще неуютно. Сейчас так по-моему уже не делают. Фиг же найдешь кто ее прикокнул, это $value. А прикокнуть по стилю программирования могут запросто. Например в чем сакральный смысл двух одинаковых проверок? Чтобы типа выкосить одну еслиф что? Типа юзеру метанарратив - порть чувак что угодно, запростяк. В нормальных же фреймворках юзеру сразу пишут - вот мы тебе унаследовали затычку - ее мучай, а там - не мучай.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий