Здравствуйте уважаемые форумчане на сайте происходит поиск по названию описанию по тегам и по модели как ограничить поиск до модели ? Чтобы можно было найти товар из тысячи нужный только один найдя его по артикулу ну по модели ??? Есть ли у кого либо опыт в этом деле заранее благодарен !
\catalog\model\catalog\product.php смотрите строки PHP: if (!empty($data['filter_tag'])) { $sql .= "pd.tag LIKE '%" . $this->db->escape($data['filter_tag']) . "%'"; } if (!empty($data['filter_name'])) { $sql .= " OR LCASE(p.model) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'"; } удалить или закоментировать
вот это удалите PHP: if (!empty($data['filter_name'])) { $implode = array(); $words = explode(' ', trim(preg_replace('/\s\s+/', ' ', $data['filter_name']))); foreach ($words as $word) { $implode[] = "pd.name LIKE '%" . $this->db->escape($word) . "%'"; } if ($implode) { $sql .= " " . implode(" AND ", $implode) . ""; } if (!empty($data['filter_description'])) { $sql .= " OR pd.description LIKE '%" . $this->db->escape($data['filter_name']) . "%'"; } } if (!empty($data['filter_name']) && !empty($data['filter_tag'])) { $sql .= " OR "; } if (!empty($data['filter_tag'])) { $sql .= "pd.tag LIKE '%" . $this->db->escape($data['filter_tag']) . "%'"; } а в оставшейся строчке убрать OR PHP: if (!empty($data['filter_name'])) { $sql .= " OR LCASE(p.model) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'"; }
Влад да дело не в этом кажись она не реагирует на за коментированные строчки вот реагирует она совсем на другое к примеру щас файл который находиться в catalog/controller/search.php PHP: if (isset($this->request->get['search']) || isset($this->request->get['tag'])) { $data = array( 'filter_name' => $search, 'filter_tag' => $tag, 'filter_description' => $description, 'filter_category_id' => $filter_category_id, 'filter_sub_category' => $sub_category, 'sort' => $sort, 'order' => $order, 'start' => ($page - 1) * $limit, 'limit' => $limit ); если удалить отсюда 'filter_name' => $search, 'filter_tag' => $tag, 'filter_description' => $description, 'filter_category_id' => $filter_category_id, 'filter_sub_category' => $sub_category, то он начинает не искать а вытаскивать все товары которые есть!!
Влад а как быть с модулем Mega Filter поиск говорит что не чего не нашел он то правильно работает а вот мега фильтр говрит что такие элементы найдены к примеру
Влад после ваших примеров в моей голове что то зашевелилось и я сам догадаллся сейчас покажу ) PHP: // sprawdź frazę / tagi if( ! empty( $this->_data['filter_name'] ) || ! empty( $this->_data['filter_tag'] ) ) { $sql = array(); /* if( ! empty( $this->_data['filter_name'] ) ) { $implode = array(); $words = explode( ' ', trim( preg_replace( '/\s\s+/', ' ', $this->_data['filter_name'] ) ) ); foreach( $words as $word ) { $implode[] = "`pd`.`name` LIKE '%" . $this->_ctrl->db->escape( $word ) . "%'"; } if( $implode ) { $sql[] = '(' . implode( ' AND ', $implode ) . ')'; } if( ! empty( $this->_data['filter_description'] ) ) { $sql[] = "`pd`.`description` LIKE '%" . $this->_ctrl->db->escape( $this->_data['filter_name'] ) . "%'"; } } */ /* if( ! empty( $this->_data['filter_tag'] ) ) { $sql[] = "`pd`.`tag` LIKE '%" . $this->_ctrl->db->escape( $this->_data['filter_tag'] ) . "%'"; } */ if( ! empty( $this->_data['filter_name'] ) ) { $tmp = array( '`p`.`model`', '`p`.`sku`', '`p`.`upc`', '`p`.`ean`', '`p`.`jan`', '`p`.`isbn`', '`p`.`mpn`' ); foreach( $tmp as $tm ) { $sql[] = "LCASE(" . $tm . ") = '" . $this->_ctrl->db->escape( utf8_strtolower( $this->_data['filter_name'] ) ) . "'"; } } if( $sql ) { $conditions['search'] = '(' . implode( ' OR ', $sql ) . ')'; } } Я закоментировал строчки которые я начал хоть не много понимать и все стала на свои места спасибо вам