[Помогите] Пропал поиск по описанию

Тема в разделе "OpenCart", создана пользователем Ян..., 19 янв 2015.

  1. Ян...

    Ян...

    Регистрация:
    21 сен 2013
    Сообщения:
    55
    Симпатии:
    16
    Здравствуйте, друзья помогите решить пробелму. После изменения поисковика, пропал поиск по описанию когда ставишь соответственную галочку.
    Прилагаю файл//public_html/catalog/model/product.php
    Код:
    <?php
    class ModelCatalogProduct extends Model {
       public function updateViewed($product_id) {
         $this->db->query("UPDATE " . DB_PREFIX . "product SET viewed = (viewed + 1) WHERE product_id = '" . (int)$product_id . "'");
       }
     
       public function getProduct($product_id) {
         if ($this->customer->isLogged()) {
           $customer_group_id = $this->customer->getCustomerGroupId();
         } else {
           $customer_group_id = $this->config->get('config_customer_group_id');
         } 
           
         $query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$customer_group_id . "') AS reward, (SELECT ss.name FROM " . DB_PREFIX . "stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "') AS stock_status, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");
       
         if ($query->num_rows) {
           $query->row['price'] = ($query->row['discount'] ? $query->row['discount'] : $query->row['price']);
           $query->row['rating'] = (int)$query->row['rating'];
         
           return $query->row;
         } else {
           return false;
         }
       }
    
       public function getProducts($data = array()) {
         if ($this->customer->isLogged()) {
           $customer_group_id = $this->customer->getCustomerGroupId();
         } else {
           $customer_group_id = $this->config->get('config_customer_group_id');
         } 
       
         $cache = md5(http_build_query($data));
       
         $product_data = $this->cache->get('product.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.' . $cache);
       
         if (!$product_data) {
           $sql = "SELECT p.product_id, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id)";
         
           if (!empty($data['filter_tag'])) {
             $sql .= " LEFT JOIN " . DB_PREFIX . "product_tag pt ON (p.product_id = pt.product_id)";     
           }
               
           if (!empty($data['filter_category_id'])) {
             $sql .= " LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id)";     
           }
         
           $sql .= " WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'";
         
           if (!empty($data['filter_name']) || !empty($data['filter_tag'])) {
             $sql .= " AND (";
                         
             if (!empty($data['filter_name'])) {
               /*$implode = array();
             
               $words = explode(' ', $data['filter_name']);
             
               foreach ($words as $word) {
                 if (!empty($data['filter_description'])) {
                   $implode[] = "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%' OR LCASE(pd.description) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%'";
                 } else {
                   $implode[] = "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%'";
                 }       
               }
             
               if ($implode) {
                 $sql .= " " . implode(" OR ", $implode) . "";
               }*/
               $sql .= $this->makeSearchStr($data);
             }
             $sql .= "OR LCASE(p.model) LIKE LCASE('%" . $this->db->escape($data['filter_name']) . "%')  OR LCASE(p.sku) LIKE LCASE('%" . $this->db->escape($data['filter_name']) . "%')  OR p.upc LIKE LCASE('%" . $this->db->escape($data['filter_name']) . "%') ";
             if (!empty($data['filter_name']) && !empty($data['filter_tag'])) {
               $sql .= " OR ";
             }
           
             if (!empty($data['filter_tag'])) {
               $implode = array();
             
               $words = explode(' ', $data['filter_tag']);
             
               foreach ($words as $word) {
                 $implode[] = "LCASE(pt.tag) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_tag'])) . "%' AND pt.language_id = '" . (int)$this->config->get('config_language_id') . "'";
               }
             
               if ($implode) {
                 $sql .= " " . implode(" OR ", $implode) . "";
               }
             }
         
             $sql .= ")";
           }
         
           if (!empty($data['filter_category_id'])) {
             if (!empty($data['filter_sub_category'])) {
               $implode_data = array();
             
               $implode_data[] = "p2c.category_id = '" . (int)$data['filter_category_id'] . "'";
             
               $this->load->model('catalog/category');
             
               $categories = $this->model_catalog_category->getCategoriesByParentId($data['filter_category_id']);
                       
               foreach ($categories as $category_id) {
                 $implode_data[] = "p2c.category_id = '" . (int)$category_id . "'";
               }
                   
               $sql .= " AND (" . implode(' OR ', $implode_data) . ")";     
             } else {
               $sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'";
             }
           }   
             
         
    
           
    
           
    
             # OCFilter start
             if (!empty($data['filter_ocfilter'])) {
               if (!$this->registry->has('ocfilter_sql') || null === $this->registry->get('ocfilter_sql')) {
                 $this->load->model('catalog/ocfilter');
    
                 $this->model_catalog_ocfilter->getOCFilterData($data);
               }
    
               if (!$this->registry->get('ocfilter_sql')) {
                 return (__FUNCTION__ == 'getTotalProducts' ? 0 : array());
               }
    
               $sql .= $this->registry->get('ocfilter_sql');
    
               if ($this->registry->has('ocfilter_sql')) {
                 $this->registry->set('ocfilter_sql', null);
               }
             }
             # OCFilter end
    
             if (!empty($data['filter_manufacturer_id'])) {
             $sql .= " AND p.manufacturer_id = '" . (int)$data['filter_manufacturer_id'] . "'";
           }
         
           $sql .= " GROUP BY p.product_id";
         
           $sort_data = array(
             'pd.name',
             'p.model',
             'p.quantity',
             'p.price',
             'rating',
             'p.sort_order',
             'p.date_added'
           ); 
         
           if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
             if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
               $sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
             } else {
               $sql .= " ORDER BY " . $data['sort'];
             }
           } else {
             $sql .= " ORDER BY p.price"; 
           }
         
           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'];
           }
         
           $product_data = array();
             
           $query = $this->db->query($sql);
       
           foreach ($query->rows as $result) {
             $product_data[$result['product_id']] = $this->getProduct($result['product_id']);
           }
         
           $this->cache->set('product.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.' . $cache, $product_data);
         }
       
         return $product_data;
       }
     
       public function getProductSpecials($data = array()) {
         if ($this->customer->isLogged()) {
           $customer_group_id = $this->customer->getCustomerGroupId();
         } else {
           $customer_group_id = $this->config->get('config_customer_group_id');
         } 
           
         $sql = "SELECT DISTINCT ps.product_id, (SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) GROUP BY ps.product_id";
    
         $sort_data = array(
           'pd.name',
           'p.model',
           'ps.price',
           'rating',
           'p.sort_order'
         );
       
         if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
           if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
             $sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
           } else {
             $sql .= " ORDER BY " . $data['sort'];
           }
         } else {
           $sql .= " ORDER BY p.sort_order"; 
         }
       
         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'];
         }
    
         $product_data = array();
       
         $query = $this->db->query($sql);
       
         foreach ($query->rows as $result) {    
           $product_data[$result['product_id']] = $this->getProduct($result['product_id']);
         }
       
         return $product_data;
       }
       
       public function getLatestProducts($limit) {
         $product_data = $this->cache->get('product.latest.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$limit);
    
         if (!$product_data) {
           $query = $this->db->query("SELECT p.product_id FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' ORDER BY p.date_added DESC LIMIT " . (int)$limit);
           
           foreach ($query->rows as $result) {
             $product_data[$result['product_id']] = $this->getProduct($result['product_id']);
           }
         
           $this->cache->set('product.latest.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$limit, $product_data);
         }
       
         return $product_data;
       }
     
       public function getPopularProducts($limit) {
         $product_data = array();
       
         $query = $this->db->query("SELECT p.product_id FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' ORDER BY p.viewed, p.date_added DESC LIMIT " . (int)$limit);
       
         foreach ($query->rows as $result) {    
           $product_data[$result['product_id']] = $this->getProduct($result['product_id']);
         }
                       
         return $product_data;
       }
    
       public function getBestSellerProducts($limit) {
         $product_data = $this->cache->get('product.bestseller.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$limit);
    
         if (!$product_data) {
           $product_data = array();
         
           $query = $this->db->query("SELECT op.product_id, COUNT(*) AS total FROM " . DB_PREFIX . "order_product op LEFT JOIN `" . DB_PREFIX . "order` o ON (op.order_id = o.order_id) LEFT JOIN `" . DB_PREFIX . "product` p ON (op.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE o.order_status_id > '0' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' GROUP BY op.product_id ORDER BY total DESC LIMIT " . (int)$limit);
         
           foreach ($query->rows as $result) {    
             $product_data[$result['product_id']] = $this->getProduct($result['product_id']);
           }
         
           $this->cache->set('product.bestseller.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$limit, $product_data);
         }
       
         return $product_data;
       }
     
       public function getProductAttributes($product_id) {
         $product_attribute_group_data = array();
       
         $product_attribute_group_query = $this->db->query("SELECT ag.attribute_group_id, agd.name FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN " . DB_PREFIX . "attribute_group ag ON (a.attribute_group_id = ag.attribute_group_id) LEFT JOIN " . DB_PREFIX . "attribute_group_description agd ON (ag.attribute_group_id = agd.attribute_group_id) WHERE pa.product_id = '" . (int)$product_id . "' AND agd.language_id = '" . (int)$this->config->get('config_language_id') . "' GROUP BY ag.attribute_group_id ORDER BY ag.sort_order, agd.name");
       
         foreach ($product_attribute_group_query->rows as $product_attribute_group) {
           $product_attribute_data = array();
         
           $product_attribute_query = $this->db->query("SELECT a.attribute_id, ad.name, pa.text FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN " . DB_PREFIX . "attribute_description ad ON (a.attribute_id = ad.attribute_id) WHERE pa.product_id = '" . (int)$product_id . "' AND a.attribute_group_id = '" . (int)$product_attribute_group['attribute_group_id'] . "' AND ad.language_id = '" . (int)$this->config->get('config_language_id') . "' AND pa.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY a.sort_order, ad.name");
         
           foreach ($product_attribute_query->rows as $product_attribute) {
             $product_attribute_data[] = array(
               'attribute_id' => $product_attribute['attribute_id'],
               'name'  => $product_attribute['name'],
               'text'  => $product_attribute['text']       
             );
           }
         
           $product_attribute_group_data[] = array(
             'attribute_group_id' => $product_attribute_group['attribute_group_id'],
             'name'  => $product_attribute_group['name'],
             'attribute'  => $product_attribute_data
           );     
         }
       
         return $product_attribute_group_data;
       }
         
       public function getProductOptions($product_id) {
         $product_option_data = array();
    
         $product_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option po LEFT JOIN `" . DB_PREFIX . "option` o ON (po.option_id = o.option_id) LEFT JOIN " . DB_PREFIX . "option_description od ON (o.option_id = od.option_id) WHERE po.product_id = '" . (int)$product_id . "' AND od.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY o.sort_order");
       
         foreach ($product_option_query->rows as $product_option) {
           if ($product_option['type'] == 'select' || $product_option['type'] == 'radio' || $product_option['type'] == 'checkbox' || $product_option['type'] == 'image') {
             $product_option_value_data = array();
         
             $product_option_value_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) WHERE pov.product_id = '" . (int)$product_id . "' AND pov.product_option_id = '" . (int)$product_option['product_option_id'] . "' AND ovd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY ov.sort_order");
           
             foreach ($product_option_value_query->rows as $product_option_value) {
               $product_option_value_data[] = array(
                 'product_option_value_id' => $product_option_value['product_option_value_id'],
                 'option_value_id'  => $product_option_value['option_value_id'],
                 'name'  => $product_option_value['name'],
                 'image'  => $product_option_value['image'],
                 'quantity'  => $product_option_value['quantity'],
                 'subtract'  => $product_option_value['subtract'],
                 'price'  => $product_option_value['price'],
                 'price_prefix'  => $product_option_value['price_prefix'],
                 'weight'  => $product_option_value['weight'],
                 'weight_prefix'  => $product_option_value['weight_prefix']
               );
             }
                     
             $product_option_data[] = array(
               'product_option_id' => $product_option['product_option_id'],
               'option_id'  => $product_option['option_id'],
               'name'  => $product_option['name'],
               'type'  => $product_option['type'],
               'option_value'  => $product_option_value_data,
               'required'  => $product_option['required']
             );
           } else {
             $product_option_data[] = array(
               'product_option_id' => $product_option['product_option_id'],
               'option_id'  => $product_option['option_id'],
               'name'  => $product_option['name'],
               'type'  => $product_option['type'],
               'option_value'  => $product_option['option_value'],
               'required'  => $product_option['required']
             );       
           }
         }
       
         return $product_option_data;
       }
     
       public function getProductDiscounts($product_id) {
         if ($this->customer->isLogged()) {
           $customer_group_id = $this->customer->getCustomerGroupId();
         } else {
           $customer_group_id = $this->config->get('config_customer_group_id');
         } 
       
         $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity > 1 AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity ASC, priority ASC, price ASC");
    
         return $query->rows;   
       }
       
       public function getProductImages($product_id) {
         $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_image WHERE product_id = '" . (int)$product_id . "' ORDER BY sort_order ASC");
    
         return $query->rows;
       }
     
       public function getProductRelated($product_id) {
         $product_data = array();
    
         $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_related pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.related_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pr.product_id = '" . (int)$product_id . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");
       
         foreach ($query->rows as $result) {
           $product_data[$result['related_id']] = $this->getProduct($result['related_id']);
         }
       
         return $product_data;
       }
       
       public function getProductTags($product_id) {
         $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_tag WHERE product_id = '" . (int)$product_id . "' AND language_id = '" . (int)$this->config->get('config_language_id') . "'");
    
         return $query->rows;
       }
       
       public function getProductLayoutId($product_id) {
         $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_layout WHERE product_id = '" . (int)$product_id . "' AND store_id = '" . (int)$this->config->get('config_store_id') . "'");
       
         if ($query->num_rows) {
           return $query->row['layout_id'];
         } else {
           return  $this->config->get('config_layout_product');
         }
       }
     
       public function getCategories($product_id) {
         $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "'");
       
         return $query->rows;
       } 
       
       public function getTotalProducts($data = array()) {
         $sql = "SELECT COUNT(DISTINCT p.product_id) AS total FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id)";
    
         if (!empty($data['filter_category_id'])) {
           $sql .= " LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id)";     
         }
       
         if (!empty($data['filter_tag'])) {
           $sql .= " LEFT JOIN " . DB_PREFIX . "product_tag pt ON (p.product_id = pt.product_id)";     
         }
             
         $sql .= " WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'";
       
         if (!empty($data['filter_name']) || !empty($data['filter_tag'])) {
           $sql .= " AND (";
                   
           if (!empty($data['filter_name'])) {
             /*$implode = array();
           
             $words = explode(' ', $data['filter_name']);
           
             foreach ($words as $word) {
               if (!empty($data['filter_description'])) {
                 $implode[] = "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%' OR LCASE(pd.description) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%'";
               } else {
                 $implode[] = "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%'";
               }       
             }
           
             if ($implode) {
               $sql .= " " . implode(" OR ", $implode) . "";
             }*/
             $sql .= $this->makeSearchStr($data);
           }
         
           if (!empty($data['filter_name']) && !empty($data['filter_tag'])) {
             $sql .= " OR ";
           }
         
           if (!empty($data['filter_tag'])) {
             $implode = array();
           
             $words = explode(' ', $data['filter_tag']);
           
             foreach ($words as $word) {
               $implode[] = "LCASE(pt.tag) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_tag'])) . "%' AND pt.language_id = '" . (int)$this->config->get('config_language_id') . "'";
             }
           
             if ($implode) {
               $sql .= " " . implode(" OR ", $implode) . "";
             }
           }
       
           $sql .= ")";
         }
       
         if (!empty($data['filter_category_id'])) {
           if (!empty($data['filter_sub_category'])) {
             $implode_data = array();
           
             $implode_data[] = "p2c.category_id = '" . (int)$data['filter_category_id'] . "'";
           
             $this->load->model('catalog/category');
           
             $categories = $this->model_catalog_category->getCategoriesByParentId($data['filter_category_id']);
             
             foreach ($categories as $category_id) {
               $implode_data[] = "p2c.category_id = '" . (int)$category_id . "'";
             }
                 
             $sql .= " AND (" . implode(' OR ', $implode_data) . ")";     
           } else {
             $sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'";
           }
         }   
       
       
    
           
    
           
    
             # OCFilter start
             if (!empty($data['filter_ocfilter'])) {
               if (!$this->registry->has('ocfilter_sql') || null === $this->registry->get('ocfilter_sql')) {
                 $this->load->model('catalog/ocfilter');
    
                 $this->model_catalog_ocfilter->getOCFilterData($data);
               }
    
               if (!$this->registry->get('ocfilter_sql')) {
                 return (__FUNCTION__ == 'getTotalProducts' ? 0 : array());
               }
    
               $sql .= $this->registry->get('ocfilter_sql');
    
               if ($this->registry->has('ocfilter_sql')) {
                 $this->registry->set('ocfilter_sql', null);
               }
             }
             # OCFilter end
    
             if (!empty($data['filter_manufacturer_id'])) {
           $sql .= " AND p.manufacturer_id = '" . (int)$data['filter_manufacturer_id'] . "'";
         }
       
         $query = $this->db->query($sql);
       
         return $query->row['total'];
       }
         
       public function getTotalProductSpecials() {
         if ($this->customer->isLogged()) {
           $customer_group_id = $this->customer->getCustomerGroupId();
         } else {
           $customer_group_id = $this->config->get('config_customer_group_id');
         }   
       
         $query = $this->db->query("SELECT COUNT(DISTINCT ps.product_id) AS total FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW()))");
       
         if (isset($query->row['total'])) {
           return $query->row['total'];
         } else {
           return 0; 
         }
       }
     
       private function makeSearchStr(&$data) {
         $str = '';
       
         if (!empty($data['filter_name'])) {
           $by_name = array();
           $by_description = array();
         
           $words = explode(' ', $data['filter_name']);
         
           foreach ($words as $word) {
             $word = trim($word);
             if (!empty($data['filter_description'])) {
               $by_description[] = "LCASE(pd.description) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%'";
             }
             $by_name[] = "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%'";
           }
         
           if ($by_name) {
             $str = " (" . implode(" AND ", $by_name) . ") ";
           }
         
           if ($by_description) {
             $str .= " OR (" . implode(" AND ", $by_name) . ") ";
           }
         
         }
         return $str;
       }
    }
    ?>
    
    Заранее благодарю за помощь
     
  2. Ян...

    Ян...

    Регистрация:
    21 сен 2013
    Сообщения:
    55
    Симпатии:
    16
    Друзья, помогите решить проблему
     
  3. fanton123

    fanton123

    Регистрация:
    24 дек 2012
    Сообщения:
    279
    Симпатии:
    31
    Что значит "После изменения поисковика"?
     
  4. Ян...

    Ян...

    Регистрация:
    21 сен 2013
    Сообщения:
    55
    Симпатии:
    16
    меняли алгоритм поиска, делали чтобы искал с такими же условиями как яндекс. Думаю человек который менял, что-то не так прописал что пропал поиск по описанию. Сейчас с ним потерянна связь
     
  5. fanton123

    fanton123

    Регистрация:
    24 дек 2012
    Сообщения:
    279
    Симпатии:
    31
    Советую вернуться к стандартному поиску. В чужом коде не разобраться, если конечно нет комментариев.

    Можно улучшить поиск с помощью модулей. На этом форуме их много. Но от себя добавлю что в Opecart поиск это беда, нормального результата не добиться.
     
  6. Ян...

    Ян...

    Регистрация:
    21 сен 2013
    Сообщения:
    55
    Симпатии:
    16
    Так в том то и дело, что сейчас ищет так как нам нужно. Только через некоторое время заметили что пропал поиск по описанию :help: