Изменение метода поиска в Prestashop - PullRequest
0 голосов
/ 11 февраля 2019

Функция поиска, как показано ниже, соответствует результатам после 3 символов и ввода, и они соответствуют названию или описанию продукта.Я ищу изменения в функции поиска темы MegaShop в Prestashop 1.7 следующим образом:

Поиск должен быть в состоянии найти части слов.Например, если пользователь пишет «привет он», поиск должен быть в состоянии найти «высокие каблуки».Это должно работать и в других порядках, скажем, «he hi» (вместо «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 голосов
/ 16 февраля 2019

Я думаю, что ваш подход не даст вам желаемого поведения.По сути, я думаю, что вам нужно создать свой собственный поисковый запрос или переопределить существующий и изменить запрос SQL.Потому что теперь есть только условия типа LIKE% text% и означают, что ваш текст должен выглядеть точно так же.Таким образом, это означает, что вы можете найти «gh he», но не «hi he».

Или вы можете разделить свой запрос на поиск по пробелам, а затем выполнить поиск по словам, проверяя, все ли они взапрос.Но также я думаю, что было бы лучше изменить LIKE с% text% на% text, чтобы исключить дублирование и поиск только по словам в начале

...