在开放式购物车中,我正在构建一个模块,我需要知道如何进行价格计算,并且我遇到了这个代码
$price = $this->currency->format($this->tax->calculate($result['price'],
$result['tax_class_id'], $this->config->get('config_tax')));
if ((float)$result['special']) {
$special = $this->currency->format($this->tax->calculate(
$result['special'],
$result['tax_class_id'], $this->config->get('config_tax')));
} else {
$special = false;
}
if ($this->config->get('config_tax')) {
$tax = $this->currency->format((float)$result['special'] ?
$result['special'] : $result['price']);
} else {
$tax = false;
}
实际上我并不知道这里发生了什么,因为我可以看到$price
和$special
以及$tax
之间确实没有区别但是应该有一个为什么以这种方式实施。
我确信我在这里遗漏了一些任何人向我解释如何在opencart中完成价格计算?
答案 0 :(得分:4)
从阅读源代码中,我理解这一点:$price
,$special
和$tax
是传递给要显示的视图的变量。
$price = $this->currency->format($this->tax->calculate($result['price'],
$result['tax_class_id'], $this->config->get('config_tax')));
每件商品都有价格,因此始终设置$price
。 $price
是;基本价格,适用的税种和税收。
if ((float)$result['special']) {
$special = $this->currency->format($this->tax->calculate(
$result['special'],
$result['tax_class_id'], $this->config->get('config_tax')));
} else {
$special = false;
}
项目可能特殊。如果是,则$special
设置为基本特价,并应用相同的税收计算集。 (以便视图代码可以同时显示原始和特殊!价格)
if ($this->config->get('config_tax')) {
$tax = $this->currency->format((float)$result['special'] ?
$result['special'] : $result['price']);
} else {
$tax = false;
}
并非所有安装都配置了税。如果是,则将$tax
设置为基本特价或基本特价。 (以便视图代码可以显示项目在税前之前花费了多少。($tax
是一个没有任何税收的价格有点不合逻辑)
有意义吗?如果您需要了解有关如何计算价格的更多信息,请仔细查看tax->calculate()
。否则就是
$taxed_price = $special ? $special : $price;
$untaxed_price = (float)$result['special'] ? $result['special'] : $result['price'];
答案 1 :(得分:2)
快速回顾特里克先生的回答。 $ this-> tax-> calculate()的三个参数是
$ value,$ tax_class_id,$ calculate = true
其中第三个不是必需的,但在原始代码中,它获取是否应该应用税的全局配置值(因为您可以在设置中禁用它)。还值得注意的是,税收对象在不同版本之间发生了变化(我认为它最后改变了1.5.1.2)所以如果你想让它向后兼容,那就需要考虑了