Подскажите пожалуйста как в модуле импорта сделать округление цены до двух знаков после запятой?
Я использую модуль - "Модуль экспорта и импорта данных для скрипта интернет-магазина ShopScript 1.2 Вариант №1"
Заранее спасибо.
округление цены в модуле импорта
Рекомендуем использовать функцию number_format() языка программирования PHP.
number_format -- Форматирует число с разделением групп
Описание
string number_format ( float number [, int decimals] )
string number_format ( float number, int decimals, string dec_point, string thousands_sep )
number_format() возвращает отформатированное число number. Функция принимает один, два или четыре аргумента (не три):
Если передан только один аргумент, number будет отформатирован без дробной части, но с запятой (",") между группами цифр по 3.
Если переданы два аргумента, number будет отформатирован с decimals знаками после точки (".") и с запятой (",") между группами цифр по 3.
Если переданы все четыре аргумента, number будет отформатирован с decimals знаками после точки и с разделитилем между группами цифр по 3, при этом в качестве десятичной точки будет использован dec_point, а в качестве разделителя групп - thousands_sep.
Используется только первый символ строки thousands_sep. Например, при передаче foo в качестве thousands_sep для форматирования числа 1000, number_format() возвращает 1f000.
Пример 1. Пример использования number_format()
Во Франции обычно используются 2 знака после запятой (','), и пробел (' ') в качестве разделителя групп. Такое форматирование получается при использовании следующего кода :
Как реализовать округление цены товара в модуле импорта данных для скрипта интернет-магазина ShopScript 1.2
Открыть файл "etrade_ie_csv_shopscript_v1.php", перейти к строке №249, там имеется такой код:
необходимо заменить его на:
Вид исправленного варианта:
это для обовления цены у существующих товаров в интернет-магазине.
Для новых товаров необходимо скорректировать строку №259:
заменить на:
Вид исправленного варианта:
number_format -- Форматирует число с разделением групп
Описание
string number_format ( float number [, int decimals] )
string number_format ( float number, int decimals, string dec_point, string thousands_sep )
number_format() возвращает отформатированное число number. Функция принимает один, два или четыре аргумента (не три):
Если передан только один аргумент, number будет отформатирован без дробной части, но с запятой (",") между группами цифр по 3.
Если переданы два аргумента, number будет отформатирован с decimals знаками после точки (".") и с запятой (",") между группами цифр по 3.
Если переданы все четыре аргумента, number будет отформатирован с decimals знаками после точки и с разделитилем между группами цифр по 3, при этом в качестве десятичной точки будет использован dec_point, а в качестве разделителя групп - thousands_sep.
Используется только первый символ строки thousands_sep. Например, при передаче foo в качестве thousands_sep для форматирования числа 1000, number_format() возвращает 1f000.
Пример 1. Пример использования number_format()
Во Франции обычно используются 2 знака после запятой (','), и пробел (' ') в качестве разделителя групп. Такое форматирование получается при использовании следующего кода :
Код: Выделить всё
<?php
$number = 1234.56;
// английский формат (по умолчанию)
$english_format_number = number_format($number);
// 1,234
// французский формат
$nombre_format_francais = number_format($number, 2, ',', ' ');
// 1 234,56
$number = 1234.5678;
// английский формат без разделителей групп
$english_format_number = number_format($number, 2, '.', '');
// 1234.57
?>
Как реализовать округление цены товара в модуле импорта данных для скрипта интернет-магазина ShopScript 1.2
Открыть файл "etrade_ie_csv_shopscript_v1.php", перейти к строке №249, там имеется такой код:
Код: Выделить всё
db_query("UPDATE ".PRODUCTS_TABLE." SET product_code='".$parameter3."', Price=".$parameter5.", enabled=1, date_added=now(), name='".$parameter4."', categoryID=".$parameter2.", in_stock=".$parameter13." WHERE productID='".$parameter1."' limit 1");
необходимо заменить его на:
Код: Выделить всё
db_query("UPDATE ".PRODUCTS_TABLE." SET product_code='".$parameter3."', Price=".number_format($parameter5,2).", enabled=1, date_added=now(), name='".$parameter4."', categoryID=".$parameter2.", in_stock=".$parameter13." WHERE productID='".$parameter1."' limit 1");
Вид исправленного варианта:
это для обовления цены у существующих товаров в интернет-магазине.
Для новых товаров необходимо скорректировать строку №259:
Код: Выделить всё
db_query("insert into ".PRODUCTS_TABLE." (productID, product_code, name, Price, enabled, date_added, categoryID, in_stock) VALUES(".$parameter1.",'".$parameter3."','".$parameter4."',".$parameter5.",1,now(),".$parameter2.",1)");
заменить на:
Код: Выделить всё
db_query("insert into ".PRODUCTS_TABLE." (productID, product_code, name, Price, enabled, date_added, categoryID, in_stock) VALUES(".$parameter1.",'".$parameter3."','".$parameter4."',".number_format($parameter5,2).",1,now(),".$parameter2.",1)");
Вид исправленного варианта:
С уважением, поддержка ElbuzGroup.
после этой модификации модуля импорта, при попытке импорта цсв, модуль выдает ошибку -
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '047.00, enabled=1, date_added=now(), name='Acer Aspire 4930G-843G25Mi (LX.AQL0X.' at line 1 SQL query : UPDATE SS_products SET product_code='2RS0LLHZG27954', Price=1,047.00, enabled=1, date_added=now(), name='Acer Aspire 4930G-843G25Mi (LX.AQL0X.039)', categoryID=6073, in_stock=100 WHERE productID='27954' limit 1
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '047.00, enabled=1, date_added=now(), name='Acer Aspire 4930G-843G25Mi (LX.AQL0X.' at line 1 SQL query : UPDATE SS_products SET product_code='2RS0LLHZG27954', Price=1,047.00, enabled=1, date_added=now(), name='Acer Aspire 4930G-843G25Mi (LX.AQL0X.039)', categoryID=6073, in_stock=100 WHERE productID='27954' limit 1
А экспорт можно сделать с округлением до двух знаков в цене?
C уважением, Алексей.
после этой модификации модуля импорта, при попытке импорта цсв, модуль выдает ошибку -
Ваш сервер не расчитан на разделители тысячных, т.е. на формат по умолчанию используемый функцией number_format().
Используйте английский формат без разделителей групп (который был описан в примере выше):
Код: Выделить всё
$english_format_number = number_format($number, 2, '.', '');
// результат 1234.57
$english_format_number = number_format($number, 1, '.', '');
// результат 1234.6
$english_format_number = number_format($number, 0, '.', '');
// результат 1234
Т.е. итоговый вариант для скрипта интернет-магазина ShopScript 1.2 будет выглядеть таким образом:
обновление данных
Код: Выделить всё
db_query("UPDATE ".PRODUCTS_TABLE." SET product_code='".$parameter3."', Price='".number_format($parameter5, 0, '.', '')."', enabled=1, date_added=now(), name='".$parameter4."', categoryID=".$parameter2.", in_stock=".$parameter13." WHERE productID='".$parameter1."' limit 1");
вставка данных
Код: Выделить всё
db_query("insert into ".PRODUCTS_TABLE." (productID, product_code, name, Price, enabled, date_added, categoryID, in_stock) VALUES(".$parameter1.",'".$parameter3."','".$parameter4."','".number_format($parameter5, 0, '.', '')."',1,now(),".$parameter2.",1)");
С уважением, поддержка ElbuzGroup.
А экспорт можно сделать с округлением до двух знаков в цене?
Можно, но это не так быстро как хотелось бы.
С уважением, поддержка ElbuzGroup.
Большое спасибо за помощь
Так всё работает нормально
Так всё работает нормально