如何使用 JavaScript 在 Shopify 上格式化货币
2021-07-17
9054
我在 Shopify 上使用 JavaScript 找到了这个用于金钱格式的 Gist https://gist.github.com/stewartknapman/8d8733ea58d2314c373e94114472d44c
我将其放在我的购物车页面中,当我尝试时:
Shopify.formatMoney(2000, '$')
我得到了这个:
cart:2166 Uncaught TypeError: Cannot read property '1' of null
at Object.Shopify.formatMoney (cart:2166)
at <anonymous>:1:9
this is at switch(formatString.match(placeholderRegex)[1]) {
我期望得到 20.00 美元
你知道问题出在哪里吗?
类似问题: Shopify Buy Button 错误:“无法读取 null 的属性‘1’”
要点内容
var Shopify = Shopify || {};
// ---------------------------------------------------------------------------
// Money format handler
// ---------------------------------------------------------------------------
Shopify.money_format = "${{amount}}";
Shopify.formatMoney = function(cents, format) {
if (typeof cents == 'string') { cents = cents.replace('.',''); }
var value = '';
var placeholderRegex = /\{\{\s*(\w+)\s*\}\}/;
var formatString = (format || this.money_format);
function defaultOption(opt, def) {
return (typeof opt == 'undefined' ? def : opt);
}
function formatWithDelimiters(number, precision, thousands, decimal) {
precision = defaultOption(precision, 2);
thousands = defaultOption(thousands, ',');
decimal = defaultOption(decimal, '.');
if (isNaN(number) || number == null) { return 0; }
number = (number/100.0).toFixed(precision);
var parts = number.split('.'),
dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands),
cents = parts[1] ? (decimal + parts[1]) : '';
return dollars + cents;
}
switch(formatString.match(placeholderRegex)[1]) {
case 'amount':
value = formatWithDelimiters(cents, 2);
break;
case 'amount_no_decimals':
value = formatWithDelimiters(cents, 0);
break;
case 'amount_with_comma_separator':
value = formatWithDelimiters(cents, 2, '.', ',');
break;
case 'amount_no_decimals_with_comma_separator':
value = formatWithDelimiters(cents, 0, '.', ',');
break;
}
return formatString.replace(placeholderRegex, value);
};
2个回答
我在我的主题中找到了
formatMoney
函数,我能够调用它并且它起作用了。
pipelineVendor.themeCurrency.formatMoney(2000);
result: $20.00
Marian07
2021-07-17
对于原始提问者来说可能为时已晚,但对于其他正在寻找答案的人来说,我相信此功能的正确调用是:
Shopify.formatMoney(2000, '${{amount}}')
而不是
Shopify.formatMoney(2000, '$')
基于 Github 上的 gist 作者 的评论:
It doesn’t actually care what the currency is. The first argument is the unformatted amount. The second argument is the format, which could be whatever you need for the currently displayed currency i.e. “£{{ amount }}”. Then pass it a new amount and new format when you change the currency.
Mykolas Raižys
2022-10-11