2013-10-21 25 views
0

所以我想设置一个类似MVCL的网站使用Opencart,但是一旦我看到了我的过滤列表,我选择索引和结果我希望检索,但它只是结果显示一切。结果页面没有显示过滤的项目opencart

它适用于其他种类,如按客户分类。

而不是显示大写和代码量我会解释我认为可能是问题的原因。

在显示过滤列表之前,用户会在名为套件的索引内显示该项目的一组选项。

这个指数然后循环,用户将选择他们选择的选项(比如说丰田可能导致所有的丰田汽车),但是它会显示所有没有应用过滤器的产品。

型号:

<?php 
class ModelCatalogKit extends Model { 
    public function getKit($kit_id) { 
     $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_custom WHERE kit='" . $kit_id . "'"); 

     return $query->row; 
    } 

    public function getKits($data = array()) { 

     if ($data) { 
      $sql = "SELECT * FROM " . DB_PREFIX . "product_custom group by kit "; 

      $sort_data = array(
       'name', 
       'sort_order' 
      ); 
      if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 
       $sql .= " ORDER BY " . $data['sort']; 
      } else { 
       $sql .= " ORDER BY name"; 
      } 

      if (isset($data['order']) && ($data['order'] == 'DESC')) { 
       $sql .= " DESC"; 
      } else { 
       $sql .= " ASC"; 
      } 

      if (isset($data['start']) || isset($data['limit'])) { 
       if ($data['start'] < 0) { 
        $data['start'] = 0; 
       } 

       if ($data['limit'] < 1) { 
        $data['limit'] = 20; 
       } 

       $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit']; 
      } 

      $query = $this->db->query($sql); 

      return $query->rows; 
     } else { 
      $kit_data = $this->cache->get('kit.' . (int)$this->config->get('config_store_id')); 

      if (!$kit_data) { 
       $query = $this->db->query("SELECT distinct kit FROM " . DB_PREFIX . "product_custom ORDER BY kit"); 

       $kit_data = $query->rows; 

       $this->cache->set('kit.' . (int)$this->config->get('config_store_id'), $kit_data); 
      } 

      return $kit_data; 
     } 
    } 

} 
?> 

控制器:

$this->data['categories'] = array(); 

     $results = $this->model_catalog_kit->getKits(); 

     foreach ($results as $result) { 

      $key = $result['kit']; 

      $this->data['categories'][$key]['kit']= array(
       'name' => $result['kit'], 
       'href' => $this->url->link('product/kit/info', 'kit_id=' . $key) 
      ); 
     } 

$kit_info = $this->model_catalog_kit->getKit($kit_id); 
var_dump($kit_info); 

回答

0

好吧,我最后想到了它。看起来没有数据显示的原因是因为过滤器没有工作。 为了改变这一点,我不得不在product.php中创建一个新的函数来过滤数据并显示产品。

1

if (!isset($this->data['kit'][$key])) { 
    $this->data['categories'][$key]['kit'] = $key; 
} 

是没用的,因为$this->data['categories'][$key]['kit'] = $key;总是被这个

$this->data['categories'][$key]['kit'] = array(
    'name' => $result['kit'], 
    'href' => $this->url->link('product/kit/info', 'kit_id=' . $key) 
); 
覆盖

$this->data['kit'][$key]设置在哪里?

和你的模型很容易受到SQL注入

$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_custom WHERE kit='" . $kit_id . "'"); 

应该转变成

$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_custom WHERE kit='" . (int)$kit_id . "'"); 

$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_custom WHERE kit='" . $this->db->escape($kit_id) . "'"); 
+0

到目前为止,谢谢你,我甚至没有意识到这个漏洞。我在原始代码中增加了一些 –

+0

是否有任何理由说明为什么我得到正确的索引,但是一旦我选择了它,查询结果就是检索所有的 –

+0

发布负责加载结果的代码后,您选择在选择框中设置一个具体套件...以及如何处理模板中的$ this-> data ['categories'] [$ key] ['kit']'? – shadyyx

0

它很难看到你正在尝试做,但我猜你在你的MySQL中有一个名为product_c的表ustom,并且在表中有一个名为“kit”的列...然后您试图从该表中返回所有具有“kit”值的行?

如果是的话,我会尝试以下

目前它说以下内容:

foreach ($results as $result) { 

     $key = $result['kit']; 

     $this->data['categories'][$key]['kit']= array(
      'name' => $result['kit'], 
      'href' => $this->url->link('product/kit/info', 'kit_id=' . $key) 
     ); 
    } 

而且你可以将其更改为以下内容:

foreach ($results as $result) { 

     if (isset($result['kit'])) { 
      $key = $result['kit']; 

      $this->data['categories'][$key]['kit']= array(
       'name' => $result['kit'], 
       'href' => $this->url->link('product/kit/info', 'kit_id=' . $key) 
      ); 
     } 
    } 

至少这将意味着查询结果只会添加到数组中,如果该特定行具有“套件”的值

正如我所说,很难说没有完全看到你正在尝试做的,知道你的表格布局等

希望这有助于

问候

杰里米,

相关问题