【问题标题】:OPENCART Search by category questionsOPENCART 按类别搜索问题
【发布时间】:2015-11-08 07:10:53
【问题描述】:

我正在使用OPENCART 2.0,我需要弄清楚如何使搜索功能能够按类别搜索。现在它只允许按产品搜索。该网站是一个墨水和碳粉电子商务网站。许多客户不知道他们需要什么墨水,因此他们使用打印机型号名称进行搜索。打印机型号名称是类别,因此我需要在搜索特定打印机时显示所有相应的墨盒。该网站是 www.1stclassink.com

我一直在玩 common.js 文件,并且能够进行产品搜索,也可以使用产品描述进行搜索。但我不确定如何进入这些类别。任何帮助将不胜感激。

我一直在搞乱这段代码:

/* Search */
$('#search input[name=\'search\']').parent().find('button').on('click', function() {
    url = $('base').attr('href') + 'index.php?route=product/search';

    var value = $('header input[name=\'search\']').val();

    if (value) {

        url += '&search=' + encodeURIComponent(value) + '&description=true';  //search parameters

    }

    location = url;
});

【问题讨论】:

    标签: php search opencart2.x


    【解决方案1】:

    好吧,我是 php 开发人员,但我还没有开发过 opencart。但是当我看到你的代码时,我似乎理解了它。我认为这可能有效。试试这个:

    $('#search input[name=\'search\']').parent().find('button').on('click', function() {
            url = $('base').attr('href') + 'index.php?route=product/search';
    
            var filter_name = $('input[name=\'filter_name\']').attr('value');
    
            if (filter_name) {
                url += '&filter_name=' + encodeURIComponent(filter_name);
            }
    
            location = url;
        });
    
        $('#header input[name=\'filter_name\']').bind('keydown', function(e) {
            if (e.keyCode == 13) {
                url = $('base').attr('href') + 'index.php?route=product/search';
    
                var filter_name = $('input[name=\'filter_name\']').attr('value');
    
                if (filter_name) {
                    url += '&filter_name=' + encodeURIComponent(filter_name);
                }
    
                location = url;
            }
        });
    

    你的头文件将如下所示:

    <div id="search">
        <div class="button-search"></div>
        <?php if ($filter_name) { ?>
        <input type="text" name="filter_name" value="<?php echo $filter_name; ?>" />
        <?php } else { ?>
        <input type="text" name="filter_name" value="<?php echo $text_search; ?>" onclick="this.value = '';" onkeydown="this.style.color = '#000000';" />
        <?php } ?>
      </div>
    </div>
    

    【讨论】:

      【解决方案2】:

      您无法按名称搜索类别。 您可以做的是获取某个类别下的所有产品,因为您需要类别的 id(例如:category_id=20 下的所有产品):

      index.php?route=product/search&search=&category_id=20
      

      您需要做的是找到一种从搜索输入中获取类别 ID 的方法,我目前找不到简单的方法,但您可以:

      • 1.通过在catalog/model/catalog/category.php 中添加一个函数来修改类别模型

        public function getCategoryByName($category_name) {
            $query = $this->db->query("SELECT category_id FROM ". DB_PREFIX . "category_description WHERE name LIKE '%".$category_name."%'");
        
            if(isset($query->row[0]['category_id'])) return $query->row[0]['category_id'];
            return false;
        }
        
      • 2.修改catalog/contoller/product/search.php里面的index()函数,寻找Get参数 你会发送(例如&amp;category=true)然后调用你的函数 getCategoryByName()【加载分类模型后】获取一个 category_id 然后将其与index() 的其余部分集成 功能。

      • 2'。或者,创建一个控制器来处理 AJAX 请求,获取 category_id 并通过 JQuery 将其插入您的 url:

        "index.php?route=product/search&search=&category_id=" + category_id

      注意:这是一个简单的代码,我没有测试它,所以请确保它已准备好用于您的生产环境。

      【讨论】:

      • 感谢您的帮助!我在搜索文件 catalog/controller/product/search.php 遇到了一些麻烦。我不确定如何正确地将函数集成到代码中。 index() 函数非常大。我加载了类别模型,并尝试利用 if (isset($this->request->get['search'])) 语句之一。但是对于如何集成所有内容有点混乱。
      • 我知道很难理解search.php 中的所有代码,但如果你问自己正确的问题,那就很简单了:“想做什么?”。我想1) 注入从我的模型函数中获得的category_id,并且2) 确保我们不搜索产品名称。所以我们需要做的就是设置$category_id,并确保$search = '';。是的,但如何?很简单,我们会在最后一刻更改它们 :)。在search.phpindex() 函数中查找$data['products'] = array();。然后添加:
      • if (isset($this-&gt;request-&gt;get['category_search']) &amp;&amp; isset($this-&gt;request-&gt;get['search'])) { $this-&gt;load-&gt;model('catalog/category'); $category_id = $this-&gt;model_catalog_category-&gt;getCategoryByName($search); $search = ''; }
      • 这段代码很简单:1)我们测试我们的自定义GET属性是否在这里category_search[不要忘记在你的url中添加它:` url += '&search=' + encodeURIComponent(value) + '&description=true' + '&category_search=true';`]2) 我们确保用户在搜索中输入了某些内容。 3) 我们从模型中调用我们的方法。 4) 我们清空搜索以确保我们不会触发特定产品搜索。测试这段代码并告诉我你得到了什么:) .**N.B**:我没有测试那个代码,请确保它处理所有可能的错误。
      • 你能给我一些反馈,它对你有用吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      • 2021-12-31
      • 2016-10-22
      • 2018-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多