OpenCart主题开发:价格为数字?

4
我需要根据产品的价格以不同的方式显示它们。我希望能够从相关的主题文件中检查$price变量的值,但是$price包含一个货币格式化字符串。因为OpenCart支持各种货币格式,所以没有简单而健壮的方法将价格字符串转换回数字。
我已经查看了产品控制器类ControllerProductProduct。据我所知,OpenCart不会向视图公开数值价格值。我可以修改控制器类,但我不想这样做,因为它会使更新变得复杂。
我有什么疏忽吗?在OpenCart主题中没有一种简单的方法对价格进行数字比较吗?
2个回答

7

在product.php(ControllerProductProduct)中查看v1.4.9.4,我可以看到以下代码来设置你所说的$price的格式化值:

if ($discount) {
    $price = $this->currency->format($this->tax->calculate($discount, $result['tax_class_id'], $this->config->get('config_tax')));
} else {
    $price = $this->currency->format($this->tax->calculate($result['price'],$result['tax_class_id'], $this->config->get('config_tax')));

为什么不将此更改为以下内容...
if ($discount) {
    $price_num = $this->tax->calculate($discount, $result['tax_class_id'], $this->config->get('config_tax'));
    $price = $this->currency->format($price_num);
} else {
    $price_num = $this->tax->calculate($result['price'],$result['tax_class_id'], $this->config->get('config_tax'));
    $price = $this->currency->format($price_num);

然后在这几行代码下面,您可以通过添加以下代码将$price_num值传递给模板:

$this->data['products'][] = array(
    'product_id'    => $result['product_id'],
    ...
    'price'         => $price,
    'price_num'     => $price_num,
    ...

应该做你所需要的。


0

2
如果Brad解释如何解决这个问题,我会选择他的答案。 :-) - Bo Persson
我明白你的意思,这也是为什么我提到他的答案,但我的问题明确排除修改系统文件。一旦你进行了最小的修改,你就不能再执行盲目更新。你必须手动将每个新版本的OpenCart与你的自定义版本合并。你也不能将你的主题作为一个独立的包分发。这是一个非常麻烦的问题,我真的想避免! - Adam Siler
2
@Metaphile:vQmod 的创建正是为了解决盲目更新问题。在模板中获取价格值而无需修改也是可能的。您可以使用 $product_info 变量。 - Jay Gilford

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接