【问题标题】:how price calculation is done in opencart如何在 opencart 中进行价格计算
【发布时间】:2011-11-09 13:18:42
【问题描述】:

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

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

【问题讨论】:

  • 嗨,我的问题不需要修改,因为它需要一个答案,我真的很感谢你的修改,但有人有想法吗?
  • 我修改了因为它无法阅读那个东西。我认为没有上下文很难回答。我可以肯定地告诉你的一件事是,因为我看到一个浮点测试if ((float)$result['special']),这是由一个没有经验的程序员编写的。要尝试解决,您必须查看结果 ["special"] 的来源,打印值,然后查看 $this->tax->calculate 方法。
  • 这不是我写的,它是我发现的 te opencart 源代码的一部分,我不明白为什么有 3 个变量,而我可以看到它们可以是一个变量与总数,为什么 $special 是浮动的?你有什么想法吗?
  • opencart 是基于 mvc 的,因此这些函数的实现位于与我的模块无关的其他文件中,我不需要编辑它们,因为我会破坏使用它们的其他东西跨度>
  • 我知道这是opencart的一部分,您不能修改其他文件中的功能,但您必须查看它们才能理解。还尝试打印出这些值并尝试理解它们。我不能只从这些代码行。

标签: php opencart


【解决方案1】:

通过阅读源代码,这是我的理解:$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'];

【讨论】:

  • 是的,实际上,计算只是获取 tax_id 并询问数据库适用的税率,我认为未征税的价格被称为 $tax 是一件愚蠢的事情,所以这个这就是为什么我无法理解它
【解决方案2】:

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

$value, $tax_class_id, $calculate = true

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

【讨论】:

  • 并不意味着粗鲁,但我不会在乎向后兼容性:),开玩笑吧,我对此表示赞同:p
  • 哈哈,如果你打算转卖它,你最好愿意兼容回至少 1.4.9 :)
  • 实际上它已经卖给了一个客户(所以我把它作为他自己的 opencart 的一个特殊模块而不需要向后比较):-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
  • 2022-08-14
  • 1970-01-01
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多