代码之家  ›  专栏  ›  技术社区  ›  Germán

在Prestashop中更改搜索方法

  •  0
  • Germán  · 技术社区  · 6 年前

    搜索功能如下所示,3个字符后匹配结果并输入,它们与产品名称或描述匹配。我希望在Prestashop 1.7中MegaShop主题的搜索功能有如下变化:

    搜索应该能够找到单词的各个部分。例如,如果用户写“hi-he”,搜索应该能够找到“high-hees”。这应该也适用于其他顺序,比如说“hi-hi”(而不是“hi-he”)也会返回“highheels”和其他每一篇用不同单词匹配这些词的文章。

    在/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 回复  |  直到 6 年前
        1
  •  0
  •   Alexander Grosul    6 年前

    我认为你的方法不会给你理想的行为。基本上,我认为您需要创建自己的搜索查询,或者覆盖已有的查询并修改SQL查询。因为现在只有LIKE%text%条件,意味着你的文本应该以完全相同的方式出现。所以这意味着你能找到“ghhe”而不是“hi he”。

    或者,您可以将您的搜索请求按间距拆分,然后按单词进行搜索,并检查它们是否都在请求中。但我也认为最好将LIKE从%text%修改为%text,以排除重复和只按单词开头搜索