在Prestashop中更改搜索方法

时间:2019-02-11 08:49:50

标签: search prestashop

如下图所示,搜索功能匹配结果并输入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>';
}

我认为必须在此文件中进行更改。

1 个答案:

答案 0 :(得分:0)

我认为您的方法不会给您令人满意的行为。基本上,我认为您需要创建自己的搜索查询或覆盖现有查询并修改SQL查询。因为现在只有LIKE%text%条件,并且意味着您的文本应该以完全相同的方式显示。因此,这意味着您能够找到“ gh he”,但找不到“ hi he”。

或者您可以将搜索请求按空格分开,然后按单词搜索以检查所有请求是否都在请求中。但我也认为将LIKE从%text%修改为%text会更好,以排除重复和仅按单词开头的单词进行搜索