Доброго времени суток. Улучшил немного поиск, а именно по умолчанию стоят галочки искать в описании и подкатегории. Поиск по названию товара работает отлично. Например название "Деталь CK-601" если в поиске набрать: "деталь" или "CK" или "601" этот товар попадет в список найденного. Но если у товара "Деталь CK-601" в описании значится "Совместим с моделью К850", то при вводе в поисковую строку "850" ничего не находит. Находит только если ввести "К850". Как можно это исправить?
catalog\model\catalog\product.php строку PHP: $sql .= "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%' OR MATCH(pd.description) AGAINST('" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "')"; (она в файле встречается два раза. Заменить оба.) Заменить на PHP: $sql .= "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%' OR LCASE(pd.description) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%'";
Опечатка вышла. Правильно PHP: $sql .= "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%' OR LCASE(pd.description) LIKE '%" . $this->db->escape(utf8_strtolower($filter_name)) . "%'"; А лучше вообще замени PHP: if (!empty($data['filter_name'])) {if (!empty($data['filter_description'])) {$sql .= "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%' OR MATCH(pd.description) AGAINST('" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "')";} else {$sql .= "LCASE(pd.name) LIKE '%" . $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) {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) . "";}} в этом файле в 2х местах. Тогда поисковая фраза будет разбиваться на слова и поиск будет по каждому слову а не по всей фразе.