如下图所示,搜索功能匹配结果并输入3个字符,并且匹配产品名称或描述。我正在寻找Prestashop 1.7中MegaShop主题的搜索功能的更改,如下所示:
搜索应该能够找到单词部分。例如,如果用户写“ hi he”,则搜索应该能够找到“高跟鞋”。这也应该以其他顺序工作,比如说“嗨”(而不是“嗨”)也将返回“高跟鞋”,并且所有其他匹配这些单词部分的文章都使用不同的单词。
在/ root / modules / tptnsearch内部,文件“ tptnsearch-ajax-php包含:
<?php
require_once('../../config/config.inc.php');
require_once('../../init.php');
require_once(dirname(__FILE__).'/tptnsearch.php');
$tptnsearch = new TptnSearch();
$result_products = array();
$products = array();
$tptnsearch_key = Tools::getValue('search_key');
$context = Context::getContext();
$count = 0;
$product_link = $context->link;
if (Tools::strlen($tptnsearch_key) >= 3) {
$products = Product::searchByName($context->language->id, $tptnsearch_key);
$total_products = count($products);
if ($total_products) {
for ($i = 0; $i < $total_products; $i++) {
if (($products[$i]['name']) && ($products[$i]['active'])) {
$images = Image::getImages($context->language->id, $products[$i]['id_product']);
$product = new Product($products[$i]['id_product']);
$products[$i]['link'] = $product_link->getProductLink($products[$i]['id_product'], $product->link_rewrite[1], $product->id_category_default, $product->ean13);
$products[$i]['link_rewrite'] = $product->link_rewrite[1];
$products[$i]['id_image'] = $images[0]['id_image'];
$products[$i]['price'] = Tools::displayPrice(Tools::convertPrice($products[$i]['price_tax_incl'], $context->currency), $context->currency);
if ($count < Configuration::get('TPTN_SEARCH_COUNT')) {
$result_products[] = $products[$i];
$count ++;
} else {
break;
}
}
}
}
$context->smarty->assign(array(
'enable_image' => Configuration::get('TPTN_SEARCH_IMAGE'),
'enable_price' => Configuration::get('TPTN_SEARCH_PRICE'),
'enable_name' => Configuration::get('TPTN_SEARCH_NAME'),
'search_alert' => $tptnsearch->no_product,
'link' => $context->link,
'products' => $result_products,
));
$context->smarty->display(dirname(__FILE__).'/views/templates/hook/popupsearch.tpl');
} else {
echo '<div class="wrap_item">'.$tptnsearch->three_character.'</div>';
}
我认为必须在此文件中进行更改。
答案 0 :(得分:0)
我认为您的方法不会给您令人满意的行为。基本上,我认为您需要创建自己的搜索查询或覆盖现有查询并修改SQL查询。因为现在只有LIKE%text%条件,并且意味着您的文本应该以完全相同的方式显示。因此,这意味着您能够找到“ gh he”,但找不到“ hi he”。
或者您可以将搜索请求按空格分开,然后按单词搜索以检查所有请求是否都在请求中。但我也认为将LIKE从%text%修改为%text会更好,以排除重复和仅按单词开头的单词进行搜索