Jump to content

Prestashop 1.6 search bar show all when empty


David

Recommended Posts

I'm using Prestashop 1.6.1.18.

I have a search bar with an option to filter by category. When I select a category and I leave the bar empty, if I click on search I want to show all the products from that category.

Currently, I get this message:

Please enter a search keyword

Is there a way to do that through the back office functions, or by modifying the source code?

This is part of the PHP function:

public static function find($id_lang, $expr, $cat = 0, $page_number = 1, $page_size = 1, $order_by = 'position',
$order_way = 'desc', $ajax = false, $use_cookie = true, Context $context = null)
{
    if (!$context) {
        $context = Context::getContext();
    }
    $cat_children_list = '0';
    if($cat != 0){
        $cat_children = Category::getChildren($cat, (int)$id_lang, true, (int)$context->shop->id);
        if(!empty($cat_children))
            $cat_children_list = implode(', ', array_map(function ($entry) {
                return $entry['id_category'];
            }, $cat_children));
    }
    $db = Db::getInstance(_PS_USE_SQL_SLAVE_);
    // TODO : smart page management
    if ($page_number < 1) {
        $page_number = 1;
    }
    if ($page_size < 1) {
        $page_size = 1;
    }
    if (!Validate::isOrderBy($order_by) || !Validate::isOrderWay($order_way)) {
        return false;
    }
    $intersect_array = array();
    $score_array = array();
    $words = explode(' ', Search::sanitize($expr, $id_lang, false, $context->language->iso_code));
    foreach ($words as $key => $word) {
        if (!empty($word) && strlen($word) >= (int)Configuration::get('PS_SEARCH_MINWORDLEN')) {
            $word = str_replace('%', '\\%', $word);
            $word = str_replace('_', '\\_', $word);
            $start_search = Configuration::get('PS_SEARCH_START') ? '%': '';
            $end_search = Configuration::get('PS_SEARCH_END') ? '': '%';
            $intersect_array[] = 'SELECT si.id_product
                FROM '._DB_PREFIX_.'search_word sw
                LEFT JOIN '._DB_PREFIX_.'search_index si ON sw.id_word = si.id_word
                WHERE sw.id_lang = '.(int)$id_lang.'
                    AND sw.id_shop = '.$context->shop->id.'
                    AND sw.word LIKE
                '.($word[0] == '-'
                    ? ' \''.$start_search.pSQL(Tools::substr($word, 1, PS_SEARCH_MAX_WORD_LENGTH)).$end_search.'\''
                    : ' \''.$start_search.pSQL(Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)).$end_search.'\''
                );
            if ($word[0] != '-') {
                $score_array[] = 'sw.word LIKE \''.$start_search.pSQL(Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)).$end_search.'\'';
            }
        } else {
            unset($words[$key]);
        }
    }
Edited by David (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...