Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Динамическое изменение цены при выборе опционального свойства.

Автор denis_savinРаздел Шаблоны TPL

Ответов: 7
Просмотров: 8104
Последний ответ 18 Марта 2014, 18:45:34
от ilyar
Динамическое обновление цены при выборе количества товара

Автор johnРаздел JS и AJAX

Ответов: 1
Просмотров: 4862
Последний ответ 08 Августа 2014, 00:01:13
от admin
Подскажите, пожалуйста, как вывести подсказку в зависимости от цены

Автор nitoitiРаздел Макросы UMI.CMS

Ответов: 1
Просмотров: 3236
Последний ответ 04 Ноября 2014, 19:56:24
от nitoiti
Цены в разных валютах. Проблемы и странности

Автор crazygeorgioРаздел Custom макросы

Ответов: 0
Просмотров: 1633
Последний ответ 03 Октября 2015, 03:22:49
от crazygeorgio
Изменение цены в зависимости от количества товаров

Автор CanektРаздел Настройка системы и модулей

Ответов: 4
Просмотров: 2471
Последний ответ 18 Августа 2016, 11:52:35
от aghigay

0 Пользователей и 2 Гостей просматривают эту тему.

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
admin уже в курсе о чём здесь пойдет речь. Всё о том же, в интернете много разных скриптов для формата числа - не могу понять, как можно подключать их в свои скрипты. Например, в basket.js в конце есть блок, который вроде обновляет сумму заказа динамически при изменении количество заказываемых товаров:

	jQuery('.change-amount .bottom').click(function(){
if (site.basket.modify.complete) {
site.basket.modify.complete = false;
var id = parseInt(this.parentNode.parentNode.parentNode.className.split('_').pop()),
e = this.parentNode.previousSibling,
old = e.value;
e.value = (parseInt(old) - 1);
e.previousSibling.value = e.value;
site.basket.modify(id, e.value, old);
}
});

Как к этой функции можно применить формат цены в виде, например 99 990, т.е. с пробелами тысячных разрядов?

Если предложите универсальный код, который можно будет использовать во всех необходимых местах basket.js, буду Вам крайне признателен за это, если не универсальный, всё равно заранее моё спасибо!

P.S. Есть одна статья, где есть одно решение, только тоже не могу понять, как подключить, и подойдет ли такой вариант?! Вроде здесь, имеющиеся файлы сайта трогать не надо. См. http://ipolh.com/development/formatirovanie-tseny-na-js/
« Последнее редактирование: 17 Октября 2014, 10:41:43 от sam »
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:JS+AJAX - формат цены без суффикса и префикса
« Ответ #1 : 18 Октября 2014, 00:26:00 »
Внимание! Обязательно, прежде, чем вносить изменения в basket.js, сделайте копию этого файла, на всякий случай.


Сам задавал вопрос, сам же и отвечу на него - мне удалось реализовать задуманное (разделение цифр в корзине, где js-методы, на тысячные разряды).

По пунктам:
1. Нашел, на мой взгляд, вполне достойный, а самое главное, рабочий скрипт (см. ниже), где помимо самого скрипта, описаны примеры форматов и их результаты после обработки цифр этим скриптом:

function number_format(number, decimals, dec_point, thousands_sep) {
// example 1: number_format(1000.00) .................... returns: '1,000'
// example 2: number_format(1000.00, 0, ',', ' ') ....... returns: '1 000'
// example 3: number_format(1000.00, 2, ',', ' ') ....... returns: '1 000,00'
// example 4: number_format(1000.0000, 2, '.', '') ...... returns: '1000.00'
// example 5: number_format(10, 2, ',', '.') ............ returns: '10,00'
// example 6: number_format(1000) ....................... returns: '1,000'
// example 7: number_format(10.000, 2) .................. returns: '10.00'
// example 8: number_format(1000.55, 1) ................. returns: '1,000.6'
// example 9: number_format(10000, 5, ',', '.') ......... returns: '10.000,00000'
// example 10: number_format(0.9, 0) .................... returns: '1'
// example 11: number_format('1.10', 2) ................. returns: '1.10'
// example 12: number_format('1.10', 4) ................. returns: '1.1000'
// example 13: number_format('1.1000', 3) ............... returns: '1.100'
// example 14: number_format('1 000,50', 2, '.', ' ') ... returns: '100 050.00'
// example 15: number_format(1e-8, 8, '.', '') .......... returns: '0.00000001'
number = (number + '')
.replace(/[^0-9+\-Ee.]/g, '');
var n = !isFinite(+number) ? 0 : +number,
prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
s = '',
toFixedFix = function (n, prec) {
var k = Math.pow(10, prec);
return '' + (Math.round(n * k) / k)
.toFixed(prec);
};
// Fix for IE parseFloat(0.55).toFixed(0) = 0;
s = (prec ? toFixedFix(n, prec) : '' + Math.round(n))
.split('.');
if (s[0].length > 3) {
s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
}
if ((s[1] || '')
.length < prec) {
s[1] = s[1] || '';
s[1] += new Array(prec - s[1].length + 1)
.join('0');
}
return s.join(dec);
}

2. Взял basket.js (/js/site/basket.js), сделал бэкап файла (это, если вдруг испорчу скрипт - я не программист, и не разработчик), открыл basket.js и в самое начало над "site.basket = {};" вставил вышеприведенный код.

3. Затем, так как мне надо было получить сумму такого формата "99 990", я выбрал пример 2/example 2 - number_format(1000.00, 0, ',', ' '), и в basket.js начал заключать в него все то, что отвечает за вывод цифр/цен.
Поясняю, нижеприведенный код, это часть basket.js, где я вносил правки (функция "site.basket.replace = function(id)" начиная с "if (e.summary.amount > 0)"):

...
if (e.summary.amount > 0) {
text = number_format(e.summary.price.actual, 0, ',', ' ') + ' ' + e.summary.price.suffix;
goods_discount = ((typeof e.summary.price.original == 'undefined') ? number_format(e.summary.price.actual, 0, ',', ' ') : number_format(e.summary.price.original, 0, ',', ' ')) + ' ' + e.summary.price.suffix;
discount = ((typeof e.summary.price.discount != 'undefined') ? number_format(e.summary.price.discount, 0, ',', ' ') : '0') + ' ' + e.summary.price.suffix;
for (i in e.items.item) {
item = e.items.item[i];
if (item.id == id) {
rem_item = false;
item_total_price = number_format(item["total-price"].actual, 0, ',', ' ') + ' ' + item["total-price"].suffix;
item_discount = ((typeof item.discount != 'undefined') ? number_format(item.discount.amount, 0, ',', ' ') : '0') + ' ' + item["total-price"].suffix;
}
...

Поясняю дальше... Если присмотритесь в код и сравните с имеющимся у вас, поймете, что, например, следующая часть кода раньше был таким:

text = e.summary.price.actual + ' ' + e.summary.price.suffix;
 
А я внес коррективы в код, т.е. заключил вывод цены в нужный мне формат - код ниже:

text = number_format(e.summary.price.actual, 0, ',', ' ') + ' ' + e.summary.price.suffix;

И так далее... Думаю, если я разобрался, как это реализовать, и вам не составить труда сделать это, если возникнет такая потребность. Тем более, что примеры форматов в скрипте имеются, выбирай не хочу.

Благодарю за внимание!

P.S. Про то, как в xslt как аналогичную вещь сделать, предлагаю воспользоваться советом/вариантом от admin http://umihelp.ru/forum/index.php/topic,1925.0.html


Внимание! Обязательно, прежде, чем вносить изменения в basket.js, сделайте копию этого файла, на всякий случай.

« Последнее редактирование: 18 Октября 2014, 00:39:06 от sam »
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:JS+AJAX - формат цены без суффикса и префикса
« Ответ #2 : 19 Октября 2014, 01:28:15 »
Приятно, что вы публикуете результаты своих поисков, они могут очень помочь другим.

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:JS+AJAX - формат цены без суффикса и префикса
« Ответ #3 : 20 Октября 2014, 00:45:31 »
Ничего особенного - реализовал свою задумку, опубликовал полученный результат (код-то/скрипт не мой - какой-то щедрый программист выложил, чтобы такие, как я могли воспользоваться). А мне приятно, что Вы, когда надо ведете меня за руку, чтобы воплощать в жизнь что-то. Так что, считайте, что я перед Вами в долгу не остаюсь. Моё Вам почтение.
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.