1

在打开的购物车中,我正在构建一个模块,我需要知道价格计算是如何完成的,我遇到了这段代码

$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;
}

实际上,我不知道这里到底发生了什么,因为我可以看到 the$price和 the$special和 the之间确实没有区别,$tax但是应该有这样的实现方式的原因。

我确定我在这里遗漏了一些东西,有人向我解释如何在 opencart 中进行价格计算?

4

2 回答 2

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设置为基本特价,并对其应用相同的税收计算集。(以便查看代码可以并排显示原始和 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'];
于 2011-11-09T13:46:17.810 回答
2

只是对特里克先生的回答的快速说明。$this->tax->calculate() 的三个参数是

$value, $tax_class_id, $calculate = true

其中第三个不是必需的,但在原始代码中,它获取是否应应用税的全局配置值(因为您可以在设置中禁用它)。还值得注意的是,税收对象在版本之间发生了变化(我认为最后一次更改的是 1.5.1.2)所以如果你想让它向后兼容,这是需要考虑的事情

于 2011-11-09T17:31:10.587 回答