Файл - catalog/model/catalog/product.php.
Функция - getProducts();
Рабочий код -
if (!empty($data['filter_name'])) {
$implode = array();
$words = explode(' ', $data['filter_name']);
$words = array_filter(array_unique($words), 'strlen');
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) . "";
}
}
Заменить на
if (!empty($data['filter_name'])) {
$word=$data['filter_name'];
$sql .="LCASE(pd.name) ='" . $this->db->escape(utf8_strtolower($word)) ." ' ";
}
Будет искать только по 100% совпадению.
или на
if (!empty($data['filter_name'])) {
$word=$data['filter_name'];
$sql .="LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%' ";
}
Тогда должно по вхождению всей строки в таком же порядке слов.Не успел проверить все, но должно работать.
Не забудьте почистить кеш.