2013-11-03 52 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