Post by ervinjason9 » Thu Jun 02, 2022 4:18 am

By the default Ajax live search module can search by product name and SKU. I want to make it so that the search also takes place by manufacturer. I was able to add a manufacturer to the controller so that it appears in the search results, but it does not search for this criterion.

I've looked at the controller and Java Script code in the template, but I don't see a place anywhere that would be responsible for the search parameters. Maybe someone came across and knows where to look?

This is catalog/controller file:

Code: Select all

<?php
class ControllerExtensionModuleLiveSearch extends Controller {
    public function index() {
        $json = array();
        if (isset($this->request->get['filter_name'])) {
            $search = $this->request->get['filter_name'];
        } else {
            $search = '';
        }
        if (isset($this->request->get['cat_id'])) {
            $cat_id = (int)$this->request->get['cat_id'];
        } else {
            $cat_id = 0;
        }

        $tag           = $search;
        $description   = '';
        $category_id   = $cat_id;
        $sub_category  = '';
        $sort          = 'p.sort_order';
        $order         = 'ASC';
        $page          = 1;
        $limit         = $this->config->get('module_live_search_limit');
        $search_result = 0;
        $error         = false;
        if( version_compare(VERSION, '3.0.0.0', '>=') ){
            $currency_code = $this->session->data['currency'];
        }
        else{
            $error = true;
            $json[] = array(
                'product_id' => 0,
                'image'      => null,
                'name'       => 'Version Error: '.VERSION,
                'extra_info' => null,
                'price'      => 0,
                'special'    => 0,
                'url'        => '#'
            );
        }

        if(!$error){
            if (isset($this->request->get['filter_name'])) {
                $this->load->model('catalog/product');
                $this->load->model('tool/image');
                $filter_data = array(
                    'filter_name'         => $search,
                    'filter_tag'          => $tag,
                    'filter_description'  => $description,
                    'filter_category_id'  => $category_id,
                    'filter_sub_category' => $sub_category,
                    'sort'                => $sort,
                    'order'               => $order,
                    'start'               => ($page - 1) * $limit,
                    'limit'               => $limit
                );
                $results = $this->model_catalog_product->getProducts($filter_data);
                $search_result = $this->model_catalog_product->getTotalProducts($filter_data);
                $image_width        = $this->config->get('module_live_search_image_width') ? $this->config->get('module_live_search_image_width') : 0;
                $image_height       = $this->config->get('module_live_search_image_height') ? $this->config->get('module_live_search_image_height') : 0;
                $title_length       = $this->config->get('module_live_search_title_length');
                $description_length = $this->config->get('module_live_search_description_length');

                foreach ($results as $result) {
                    if ($result['image']) {
                        $image = $this->model_tool_image->resize($result['image'], $image_width, $image_height);
                    } else {
                        $image = $this->model_tool_image->resize('placeholder.png', $image_width, $image_height);
                    }

                    if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
                        $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), $currency_code);
                    } else {
                        $price = false;
                    }

                    if ((float)$result['special']) {
                        $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $currency_code);
                    } else {
                        $special = false;
                    }

                    if ($this->config->get('config_tax')) {
                        $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price'], $currency_code);
                    } else {
                        $tax = false;
                    }

                    if ($this->config->get('config_review_status')) {
                        $rating = (int)$result['rating'];
                    } else {
                        $rating = false;
                    }
                    $json['total'] = (int)$search_result;
                    $json['products'][] = array(
                        'product_id'  => $result['product_id'],
                        'image'       => $image,
                        'name' => utf8_substr(strip_tags(html_entity_decode($result['name'], ENT_QUOTES, 'UTF-8')), 0, $title_length) . '..',
                        'extra_info' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $description_length) . '..',
                        'price'       => $price,
                        'special'     => $special,
                        'url'        => $this->url->link('product/product', 'product_id=' . $result['product_id'])
                    );
                }
            }
        }
        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));
    }
}
This is JS code in the template:

Code: Select all

var live_search = {
                    selector: '#search input[name=\'search\']',
                    text_no_matches: '{{ text_empty }}',
                    height: '50px'
                }

                $(document).ready(function() {
                    var html = '';
                    html += '<div class="live-search">';
                    html += '   <ul>';
                    html += '   </ul>';
                    html += '<div class="result-text"></div>';
                    html += '</div>';

                    //$(live_search.selector).parent().closest('div').after(html);
                    $(live_search.selector).after(html);

                    $(live_search.selector).autocomplete({
                        'source': function(request, response) {
                            var filter_name = $(live_search.selector).val();
                            var cat_id = 0;
                            var module_live_search_min_length = '{{ module_live_search_min_length|abs }}';
                            if (filter_name.length < module_live_search_min_length) {
                                $('.live-search').css('display','none');
                            }
                            else{
                                var html = '';
                                html += '<li style="text-align: center;height:10px;">';
                                html += '<img class="loading" src="catalog/view/theme/default/image/loading.gif" />';
                                html += '</li>';
                                $('.live-search ul').html(html);
                                $('.live-search').css('display','block');

                                $.ajax({
                                    url: 'index.php?route=extension/module/live_search&filter_name=' +  encodeURIComponent(filter_name),
                                    dataType: 'json',
                                    success: function(result) {
                                        var products = result.products;
                                        $('.live-search ul li').remove();
                                        $('.result-text').html('');
                                        if (!$.isEmptyObject(products)) {
                                            var show_image = {{ module_live_search_show_image|abs }};
                                            var show_price = {{ module_live_search_show_price|abs }};
                                            var show_description = {{ module_live_search_show_description|abs }};
                                            $('.result-text').html('<a href="{{ module_live_search_href }}'+filter_name+'" class="view-all-results">{{ text_view_all_results|e }} ('+result.total+')</a>');

                                            $.each(products, function(index,product) {
                                                var html = '';

                                                html += '<li>';
                                                html += '<a href="' + product.url + '" title="' + product.name + '">';
                                                if(product.image && show_image){
                                                    html += '   <div class="product-image"><img alt="' + product.name + '" src="' + product.image + '"></div>';
                                                }
                                                html += '   <div class="product-name">' + product.name ;
                                                if(show_description){
                                                    html += '<p>' + product.extra_info + '</p>';
                                                }
                                                html += '</div>';
                                                if(show_price){
                                                    if (product.special) {
                                                        html += '<div class="product-price"><span class="price">' + product.special + '</span></div>';
                                                    } else {
                                                        html += '   <div class="product-price"><span class="price">' + product.price + '</span></div>';
                                                    }
                                                }
                                                html += '<span style="clear:both"></span>';
                                                html += '</a>';
                                                html += '</li>';
                                                $('.live-search ul').append(html);
                                            });
                                        } else {
                                            var html = '';
                                            html += '<li style="text-align: center;height:10px;">';
                                            html += live_search.text_no_matches;
                                            html += '</li>';

                                            $('.live-search ul').html(html);
                                        }
                                        $('.live-search').css('display','block');
                                        return false;
                                    }
                                });
                            }
                        },
                        'select': function(product) {
                            $(live_search.selector).val(product.name);
                        }
                    });

                    $(document).bind( "mouseup touchend", function(e){
                      var container = $('.live-search');
                      if (!container.is(e.target) && container.has(e.target).length === 0)
                      {
                        container.hide();
                      }
                    });
                });
Also module has admin/controller file. But I think that he is not responsible for the search criteria. Any ideas where I can edit the search criteria?

Alight Motion Pro is the first professional motion design app bringing you professional-quality animation, motion graphics, visual effects, video editing, video compositing, and more!


Newbie

Posts

Joined
Thu Jun 02, 2022 3:52 am

Post by straightlight » Thu Jun 02, 2022 8:35 pm

OC version. Custom codes request. You could always create a new service request in the Commercial Support section of the forum to get this done as a custom job.

Dedication and passion goes to those who are able to push and merge a project.

Regards,
Straightlight
Programmer / Opencart Tester


Legendary Member

Posts

Joined
Mon Nov 14, 2011 11:38 pm
Location - Canada, ON
Who is online

Users browsing this forum: No registered users and 51 guests