如何在opencart中完成价格计算

时间:2011-11-09 13:18:43

标签: php opencart

在开放式购物车中,我正在构建一个模块,我需要知道如何进行价格计算,并且我遇到了这个代码

$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中完成价格计算?

2 个答案:

答案 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)所以如果你想让它向后兼容,那就需要考虑了