округление цены в модуле импорта

Помощь пользователям в работе с программой E-Trade PriceList Importer
Ответить
Venom
Сообщения: 9
Зарегистрирован: 30 сен 2009 15:05

27 ноя 2009 10:53

Подскажите пожалуйста как в модуле импорта сделать округление цены до двух знаков после запятой?
Я использую модуль - "Модуль экспорта и импорта данных для скрипта интернет-магазина ShopScript 1.2 Вариант №1"
Заранее спасибо.
Аватара пользователя
TechAdmin
Администратор
Сообщения: 4286
Зарегистрирован: 27 авг 2008 14:30

27 ноя 2009 11:45

Рекомендуем использовать функцию 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 знака после запятой (','), и пробел (' ') в качестве разделителя групп. Такое форматирование получается при использовании следующего кода :

Код: Выделить всё

<?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");

Вид исправленного варианта:
ShopScript_module1.png
ShopScript_module1.png (12.7 КБ) 8560 просмотров

это для обовления цены у существующих товаров в интернет-магазине.

Для новых товаров необходимо скорректировать строку №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)");

Вид исправленного варианта:
ShopScript_module2.png
ShopScript_module2.png (11.56 КБ) 8560 просмотров
С уважением, поддержка ElbuzGroup.
Venom
Сообщения: 9
Зарегистрирован: 30 сен 2009 15:05

27 ноя 2009 13:08

после этой модификации модуля импорта, при попытке импорта цсв, модуль выдает ошибку -

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
Aleksey
Сообщения: 241
Зарегистрирован: 11 июн 2009 15:40

27 ноя 2009 16:02

А экспорт можно сделать с округлением до двух знаков в цене?
C уважением, Алексей.
Аватара пользователя
TechAdmin
Администратор
Сообщения: 4286
Зарегистрирован: 27 авг 2008 14:30

27 ноя 2009 16:39

после этой модификации модуля импорта, при попытке импорта цсв, модуль выдает ошибку -

Ваш сервер не расчитан на разделители тысячных, т.е. на формат по умолчанию используемый функцией 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.
Аватара пользователя
TechAdmin
Администратор
Сообщения: 4286
Зарегистрирован: 27 авг 2008 14:30

27 ноя 2009 16:40

А экспорт можно сделать с округлением до двух знаков в цене?

Можно, но это не так быстро как хотелось бы.
С уважением, поддержка ElbuzGroup.
Venom
Сообщения: 9
Зарегистрирован: 30 сен 2009 15:05

27 ноя 2009 16:56

Большое спасибо за помощь
Так всё работает нормально
Ответить

Вернуться в «Техническая поддержка программы E-Trade PriceList Importer»