Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Нули в цене


Recommended Posts

Разбираясь с order_form.php наткнулся на такой момент: если добавить в существующий заказ еще товар, то после сообщения об успешном добавлении товара в заказ, цена меняется с дробной на целую. Т.е., допустим было 1550.0000, стало 1550.

Первая цифра выводится php в том виде в котором она есть в БД (1550.0000), и может быть "отформатирована" в нужный формат (хххх.хх) с помощью sprintf (например, так: <?php echo sprintf("%01.2f", $order_product['price']); ?>). А вторая получается в результате отработки javasript в шаблоне:

html += '  <td class="right">' + product['price'] + '<input type="hidden" name="order_product[' + product_row + '][price]" value="' + product['price'] + '" /></td>';

Как "отформатировать" вывод "+ product['price'] +", чтобы был формат хххх.хх, т.е с плавающей точкой, два разряда после точки. Мне кажется, что этот скрипт выводит строку, а нам нужно число. 

Слышал, что на js простого преобразование типов нет. Можете что-нибудь посоветовать?

 

 

Надіслати
Поділитися на інших сайтах


Слышал, что на js простого преобразование типов нет. Можете что-нибудь посоветовать?

Слышал, гугл многие советуют.

https://github.com/alexei/sprintf.js

http://www.diveintojavascript.com/projects/javascript-sprintf

Надіслати
Поділитися на інших сайтах


Хватит стебаться, люди! ))

Я вопрос сформулировал не правильно. Если даже product['price'] в js и строка, то и выводился бы как строка хххх.хх, верно?

А выводится без дробной части. Значит, так в json['order_product'] попал. И неважно, str или float.

Верно я говорю? ))

Вот если бы product['price'] все таки был строкой вида хххх.хх, тогда  parseFloat мне бы помог. 

Надіслати
Поділитися на інших сайтах


В catalog\controller\checkout\manual.php price уже целое число. Вот такой эксперимент показывает, что json передает то, что в него посылают.

$json['order_product'][] = array(
					'product_id' => $product['product_id'],
					'name'       => $product['name'],
					'model'      => $product['model'], 
					'option'     => $option_data,
					'download'   => $download_data,
					'quantity'   => $product['quantity'],
					'stock'      => $product['stock'],
					'price'      => 1111.11,								
//					'price'      => $product['price'],	
					'total'      => $product['total'],	
					'tax'        => $this->tax->getTax($product['price'], $product['tax_class_id']),
					'reward'     => $product['reward']				
				);

В заказ попадет цена 1111.11.

В БД в order_product цены вида хххх.хххх. А вот в этом месте:

			$products = $this->cart->getProducts();
							
			foreach ($products as $product) {
				$product_total = 0;
				echo var_dump($this->cart->getProducts());
...
...
...

}

в дампе уже вот такая штука:

 ["price"]=>
float(1090)
 ["total"]=>
float(1090)

Т.е. само число целое, но тип данных стоит float... Может быть искать в $products = $this->cart->getProducts()? 

Это, кстати, какой cart.php?

Надіслати
Поділитися на інших сайтах


Посмотрел, ничего необычного не увидел... Я, похоже, в дебри залез. Почему-то действие "submit" ajax-ом вытаскивает цены без дробной части...

Надіслати
Поділитися на інших сайтах


Посмотрел у себя на версии 1.5.4.1 и там тоже похожая ситуация в админке.

 

Скорее всего это будет и на других версиях.

Расскажите подробнее о целях вывода в определённом формате в админке.

Надіслати
Поділитися на інших сайтах

Для форматирования в валюте по умолчанию замените в файле admin/controller/sale/oprder.php строки:

				'price'            => $order_product['price'],
				'total'            => $order_product['total'],

На:

				'price'            =>  $this->currency->format($order_product['price']),
				'total'            => $this->currency->format($order_product['total']),
Надіслати
Поділитися на інших сайтах

Для правильной работы ajax запроса правим файл catalog/controller/checkout/manual.php

Строки:

					'price'      => $product['price'],	
					'total'      => $product['total'],	

Меняем на:

					'price'      => $this->currency->format($product['price']),	
					'total'      => $this->currency->format($product['total']),	

Вроде всё.

  • +1 1
Надіслати
Поділитися на інших сайтах

Цель проста - единый вид выводимых данных. Я занимался этим вопросом, и столкнулся с тем, что независимо от настроек валюты в админке, относительно количества разрядов после разделителя дробной и целой частей в некоторых местах формат вывода цен имеет отличный вид: либо хххх (целое), либо хххх.хххх (с плавающей точкой, но с бОльшим числом разрядов после точки). В админке у меня стандартно - 2 разряда после точки. Валюта рубль. Пробовал на чистом и "пиленном" ИМ, с разными валютами.  Я пришел к выводу, что отображение цен в order_form.tpl не проработанно в 1.5.6. Пришлось вносить правки в контроллер и шаблон, Но полностью решить проблему не удается. После обновления формы (нажатия кнопки "Добавить товар", например) все  цены выводится, игнорируя настройки валюты. Например, НДС высчитывается юолее 6 разрядов после точки. А цена и Итого - целые числа. Я не использую копеек в ИМ, но так не должно быть, по идее.

Надіслати
Поділитися на інших сайтах


mpn2005, спасибо!

В контроллере я раньше эти правки внес. А вот manual.php... 7 раз смотрел на этот массив, и не заметил. Пытался передавать из него число 1111.22, и все работало. Не додумался =) 

Только у меня в контроллере:

'price'    => $this->currency->format($product['price'], $order_info['currency_code'], $order_info['currency_value']),
'total'    => $this->currency->format($product['total'], $order_info['currency_code'], $order_info['currency_value'])
Надіслати
Поділитися на інших сайтах


Заметил следующее. Зашел как покупатель (не логинился, просто открыл главную), установил валюту евро. Зашел в админку админом, открыл кем-то ранее созданный заказ, изменил кол-во товара и отправил запрос (нажал кнопку) - цены стали в евро )))). Это если вкладки открыты в одном браузере. Если в разных - такого не происходит

Надіслати
Поділитися на інших сайтах


Тут уже смотря как надо. Можно с налогом или без налога.

Можно (если надо) в другую валюту перевести.

 

Добавление товара идёт через этот manual.php.

 

Если надо проводить манипуляции с товарами в заказе, то надо туда и вносить изменения.

И ajax запрос будет нормально отрабатывать.

Надіслати
Поділитися на інших сайтах

Заметил следующее. Зашел как покупатель (не логинился, просто открыл главную), установил валюту евро. Зашел в админку админом, открыл кем-то ранее созданный заказ, изменил кол-во товара и отправил запрос (нажал кнопку) - цены стали в евро )))). Это если вкладки открыты в одном браузере. Если в разных - такого не происходит

 

Эти функции разнесены на пользовательскую часть и админскую.

При формате валюты в клиентской части берётся валюта из сессии пользователя.

 

По хорошему там нужно напрямую указать например валюту по умолчанию в магазине.

И в неё переводить.

 

Подробнее можно глянуть в system/library/currency.php

Функция - public function format($number, $currency = '', $value = '', $format = true)

Вторым параметром идёт код валюты.

Добавьте его в вышеописанные правки явным образом.

Например: $this->currency->format($product['total'], 'RUB')

  • +1 2
Надіслати
Поділитися на інших сайтах

mpn2005, я тогда задам еще один вопрос, на эту же тему. В табе Итоги выводится общая сумма и налог. В шаблоне это строка:

<td class="right"><?php echo $order_total['value']; ?></td>

Выводятся цены без копеек. Я пошел по легкому пути, увидел в БД поле text и вывел его:

<td class="right"><?php echo $order_total['text']; ?></td>

Но это же не верно?

Надіслати
Поділитися на інших сайтах


С полем total нужно проделать те же изменения.

В обоих файлах.

 

Чтобы и при открытии страницы и при добавлении товара (ajax запросом) было всё корректно.

 

P.S.: В том месте нет ajax запросов по изменению товаров.

Достаточно поменять вывод в админ части.

Надіслати
Поділитися на інших сайтах

С полем total нужно проделать те же изменения.

В обоих файлах.

 

Чтобы и при открытии страницы и при добавлении товара (ajax запросом) было всё корректно.

 

P.S.: В том месте нет ajax запросов по изменению товаров.

Достаточно поменять вывод в админ части.

Я имею ввиду Totals:

post-7857-0-95820000-1384961985_thumb.jpg

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.