문제

I need to display some products differently depending on their price. I hoped that I could simply check the value of the $price variable from within the relevant theme file(s), but $price contains a currency formatted string. And because OpenCart supports a variety of currency formats, there's no simple, robust way of converting price strings back into numbers.

I've looked in the product controller class, ControllerProductProduct. So far as I can tell, OpenCart does not expose a numeric price value to views. I could modify the controller class, but I'd rather not because it would complicate updates.

Have I overlooked something? Is there no easy way to perform a numeric comparison on a price from within an OpenCart theme?

도움이 되었습니까?

해결책 2

Unfortunately the answer is no, OpenCart does not expose numeric price values to themes. You will have to modify core files, which Brad explains how to do.

다른 팁

Looking at v1.4.9.4 in product.php (ControllerProductProduct) I can see the following code that sets the formatted value of $price that you're talking about:

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')));

Why don't you change this to be the following...

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);

And then a few lines down from this, you can then pass on this $price_num value to the template by adding the following:

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

Should do what you need

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top