2013-11-03 59 views
0

价格价值与计税价值试图筛选产品的价格时,客户插入minimun和最大值。我如何计算查询

product.php

public function getProducts($data = array()) { 
.... 

if (!empty($data['min'])) { 
    $sql .= " AND p.price BETWEEN '" .$data['min']. "' AND 9999 "; 
} 

与此代码,类别页面会列出从价×所有的产品,直到9999

的问题是一些产品具有tax和值店另一个表(oc_tax_rate)。 那么如何在查询中获得产品的最终价格?(p.price +税),像这样:

if (!empty($data['min'])) { 
    $sql .= " AND final_price BETWEEN '" .$data['min']. "' AND 9999 "; 
} 

为我检查页面控制器/ category.php

$this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')) 

上面的代码将返回最终价格。

OC:v1.5.6

回答

1

首先,当你使用一个minmax过滤器值,查询不应该选择between min and 9999between 0 and max但你应该这样做:

if (!empty($data['min'])) { 
    $sql .= " AND p.price >= " . (int)$data['min']; 
//        ^^^^^ - against SQL injection!!! 
} 

if (!empty($data['max'])) { 
    $sql .= " AND p.price <= " . (int)$data['max']; 
//        ^^^^^ - against SQL injection!!! 
} 

此外,在注释中,不要忘了治愈您的代码针对SQL注入!现在

,给您真正的问题:这是不可能得到的税收和在一个查询得到产品一起计算征税价格。但你可以在你的模型做到这一点 - 找到的代码

foreach ($query->rows as $result) { 
    $product_data[$result['product_id']] = $this->getProduct($result['product_id']); 
} 

这一部分,我们将修改这种方式:

foreach ($query->rows as $result) { 
    if (!empty($data['min']) 
      && $this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')) >= $data['min']) { 
     $product_data[$result['product_id']] = $this->getProduct($result['product_id']); 
    } else if (!empty($data['max']) 
      && $this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')) <= $data['max']) { 
     $product_data[$result['product_id']] = $this->getProduct($result['product_id']); 
    } else { 
     $product_data[$result['product_id']] = $this->getProduct($result['product_id']); 
    } 
} 
+0

是真棒,谢谢:d,我希望我将发布免费推广解决这个问题后opencart。 – rusly

+0

不客气;-) – shadyyx