2011-10-30 172 views
2

我正在尋找一種使用CodeIgniter和多個過濾器參數與複選框進行搜索的好方法。爲了簡單起見,想象一下:CodeIgniter搜索查詢過濾器參數

[X] T-shirts 
    [ ] M 
    [ ] L 
    [X] XL 
[ ] Pants 
    [ ] M 
    [ ] L 
    [ ] XL 

一個頁面顯示商店中所有可用的衣服(get_all)。 您可以使用複選框僅顯示t-shitrs。 我已經得到了這樣的東西像這樣/衣服/類型/ t恤 但現在在T恤我想顯示L和XL大小(兩個選中的複選框)。

我不想使用下拉菜單,因爲我希望能夠同時顯示各種組合,例如尺寸爲L的T恤和XL褲子。

最終我希望這是一個基於AJAX的搜索,所以POST會比基於URI的搜索更好。

實現類似這樣的最佳方式是什麼?

回答

0

創建此表單。重複每個產品類型的字段集(這個例子中示出的T恤):

<form method="post" action="url/to/find_products"> 

    <!-- repeat for all product types --> 
    <fieldset> 
     <input type="checkbox" name="products[tshirt][active]" value="1" /> Tshirt 

     <fieldset> 
      <input type="checkbox" name="products[tshirt][size]" value="s" /> S 
      <input type="checkbox" name="products[tshirt][size]" value="m" /> M 
      <input type="checkbox" name="products[tshirt][size]" value="l" /> L 
     </fieldset> 
    </fielset> 
    <!-- end repeat --> 

</form> 

「有效」鍵沒有被使用,但它確保當選擇任何選項存在producttype鍵。

無論您對每種產品類型使用單獨的表格還是將它們全部放在一個表格中,控制器方法都會有所不同。由於第一個更困難,在這裏:

function find_products() { 
    $products = $this->input->post('products'); 
    $results = array(); 

    foreach ($products as $product => $options) { 
     $table_name = $product."s"; 
     $query = $this->db->from($table_name); 

     if (count($options['size']) > 0) { 
      $query->where_in('size', $options['size']); 
     } 

     $results = array_merge($results, $query->get()); 
    } 

    return $results; # Or display view, or whatever. 
} 

請注意:這是非常不安全的。確保用戶的輸入有效。

+0

非常感謝!最終我需要的東西比我發佈的例子還要多,但是這讓我開始了! – Robert