#php #opencart
#php #opencart
Вопрос:
Я использую OpenCart.
На моем сайте я ищу термин «Красный». Мне представлен ряд результатов, таких как:
- Красная фетровая сумка
- Красная сумка для ноутбука
- и т.д…
Но я также получаю такие результаты, как:
- Обложка кредитной карты
- Кожаная обложка для кредитных карт
- и т.д..
Это потому, что буквы «red» существуют внутри слова «credit». Как я могу предотвратить это и просто выполнить поиск только по всему слову / термину?
Я не думал публиковать весь search.php файл, поскольку я думал, что это будет многовато, был нацелен на тех, кто может знать, что им нужно, чтобы я скопировал сюда, чтобы увидеть.
Ответ №1:
Это потому, что 99,999999% поисковых запросов во всем Интернете работают таким образом. Я понимаю, что вы хотите предоставить своим клиентам только наиболее релевантные результаты, но вы, вероятно, забываете о удобстве использования вашей веб-страницы.
В настоящее время клиенты привыкли искать такие термины, как yes
, и ожидают результатов, таких как Yes
, yesterday
, Yesus
, и т. Д. Или даже когда они не знают, как слово продолжается, и помнят только основу слова, а также когда другие слова имеют одинаковую основу, например Nebula
, и nebulosa
(латинское название вида совы strix nebulosa) — у них одинаковая основа nebul
. Теперь, когда вы применяете желаемую модификацию поиска, результаты поиска не будут найдены, пока не будут использованы правильные слова.
Но хорошо, вот необходимые изменения — вам нужно изменить две строки catalog/model/catalog/product.php
в методе getProducts()
— найдите эту строку (около строки 120):
$implode[] = "pd.name LIKE '%" . $this->db->escape($word) . "%'";
и измените его на
$implode[] = "pd.name = '" . $this->db->escape($word) . "'";
// ^- changed LIKE to =
// ^- we removed percentage signs -^
а затем сделайте то же самое для этой строки (должно быть 128)
$sql .= " OR pd.description LIKE '%" . $this->db->escape($data['filter_name']) . "%'";
изменение на
$sql .= " OR pd.description = '" . $this->db->escape($data['filter_name']) . "'";
// ^- again changed LIKE to =
// ^- again remove percentage signs here -^
После этих двух изменений поиск должен работать так, как требуется (поиск только полных слов в названиях и описаниях продуктов).