繁体   English   中英

存储和检索搜索结果

[英]Store and retrieve search results

我有点受一段代码的困扰。 我有一个搜索字段,它调用一个PHP函数来查找数据库:

$this->_helper->layout->disableLayout();
$q = $this->getRequest()->getParam('q');

 $product_db = new Products();
 $this->view->products = $product_db->searchProduct($q);
 foreach($this->view->products as $product)
 {
      ....
 }

结果通过JQuery加载到我的HTML页面中:

var searchItem = function() {
    if($('#json_search').val())
    {
        $('#search-resultlist').load('/search/quick/q/'+ $('#json_search').val() );
    }
    else {
        $('#search-resultlist').html('');
    }
}

HTML:

<div class="right-searchcontent" >
  <input type="text" class="form-control" placeholder="Search ... " id="json_search">
</div>
<div class="right-searchresult">
  <ul id="search-resultlist" >
    <li >

    </li>
  </ul>
</div>

现在,我基本上想要实现的目标是创建“搜索历史”。 最初,我在搜索控制器中使用SESSION数组进行了尝试:

if(!isset($_SESSION['history'])) {
  $_SESSION['history'] = array();
}

并在我的函数中显示数据库搜索结果:

if(!empty($product)){
  if(!in_array($product->naam, $_SESSION['history']))
  {
    $_SESSION['history'][] = $product->naam;
  }
 }

但这存储了我曾经搜索过的所有值(例如:“ sk”,“ ah”),我只想要我实际单击的值。

谁能指出我正确的方向?

我一直在尝试使用localStorage来达到目的,但这并不能为我提供正确的解决方案。 我也尝试使用具有此功能的Cookies:

var cookieList = function(cookieName) {
    var cookie = $.cookie(cookieName);
    var items = cookie ? cookie.split(/,/) : new Array();

    return {
        "add": function(val) {
            //Add to the items.
            items.push(val);
            //Save the items to a cookie.
            $.cookie(cookieName, items.join(','));
        },
        "remove": function (val) {
            indx = items.indexOf(val);
            if(indx!=-1) items.splice(indx, 1);
            $.cookie(cookieName, items.join(','));        },
        "clear": function() {
            items = null;
            //clear the cookie.
            $.cookie(cookieName, null);
        },
        "items": function() {
            return items;
        }
      }
}

但是,当我尝试提醒list.items时,它只是返回了整个方法。

单击产品名称可以得到产品名称,但是我不知道如何将其存储到SESSION或其他任何时候可以在任何页面上获得的产品。

$(document).on('click', 'a.searchItem', function(e){
  e.preventDefault();
  var search = $(this).attr('value'));
});

我已经使用的功能无法解决:

var cookieList = function(cookieName) {
    var cookie = $.cookie(cookieName);
    var items = cookie ? cookie.split(/,/) : new Array();

    return {
        "add": function(val) {
            //Add to the items.
            items.push(val);
            //Save the items to a cookie.
            $.cookie(cookieName, items.join(','));
        },
        "contain": function (val) {
        //Check if an item is there.
        if (!Array.prototype.indexOf) {
            Array.prototype.indexOf = function(obj, start) {
                for (var i = (start || 0), j = this.length; i < j; i++) {
                    if (this[i] === obj) { return i; }
                }
                return -1;
            };
        }
        var indx = items.join(',').indexOf(val);
        if(indx > -1){
            return true;
        }else{
            return false;
        }                                                 },
        "remove": function (val) {
            indx = items.indexOf(val);
            if(indx!=-1) items.splice(indx, 1);
            $.cookie(cookieName, items.join(','));        },
        "clear": function() {
            items = null;
            //clear the cookie.
            $.cookie(cookieName, null);
        },
        "items": function() {
            return items;
        }
    }
}

当有人点击搜索结果时,它会被添加到cookie列表中:

$(document).on('click', 'a.searchItem', function(e){
  var search = $(this).attr('value');
  var list = new cookieList("MyItems");
  if(!list.contain(search)){
    list.add(search);
  }
});

当打开搜索框时,我显示列表的结果:

jQuery.each(list.items(), function(index, value){
  ....
});

也许这会帮助某人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM