OpenCart也在产品标题内搜索

时间:2014-06-26 18:12:18

标签: php opencart

我正在使用OpenCart。

在我的网站上,我正在搜索“红色"”这个词。我收到了许多结果,例如:

  • 红毡袋
  • 红色笔记本电脑包
  • 等...

但我也得到如下结果:

  • 信用卡封面
  • 信用卡封皮
  • 等。

这是因为字母“红色”'存在于“信用”这个词的内部。如何防止这种情况,只搜索整个单词/术语?

我没想过发布整个search.php文件,因为我觉得这会有点多,针对那些可能知道他们需要我复制到这里看看的人。

1 个答案:

答案 0 :(得分:0)

这是因为99.999999%的搜索通过所有互联网以这种方式工作。我们了解您希望仅向您的客户提供最相关的结果,但您可能会忘记网页的用户友好性。

现在,客户习惯于搜索yes这样的字词,并期待YesyesterdayYesus等结果。或者即使他们不知道如何这个词继续并且只记住单词的基础,并且当更多的单词具有相同的基数时,例如Nebulanebulosa(猫头鹰的种类名称​​ 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     -^

在这两项更改之后,搜索应该按照需要运行(仅搜索产品标题和说明中的完整单词)。