2014-10-01 2 views
1

Я немного застрял в куске кода. У меня есть поле поиска, которое вызывает функцию 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) 
{ 
     .... 
} 

В результате этого загружается в моем HTML страницы с помощью JQuery:

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 он только что вернулся мне весь метод.

я могу достигнуть название продукта, когда я нажимаю, но я просто не знаю, как я могу хранить это в сессию или что-то еще, что я могу достигнуть в любое время на любой странице ..

+0

вы можете использовать JQuery и куки для хранения те, которые кликали в печенье –

+0

Сегодня утром я играл с куки-файлами, но я не мог правильно это сделать. Я отредактировал свой вопрос и добавил функцию, которую я использовал для файлов cookie. – Matheno

+0

'alert (list.items())', а не 'alert (list.items)' –

ответ

0

I'ts был зафиксирован с функцией у меня уже был:

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; 
     } 
    } 
} 

Когда кто-то нажимает на поиск в результате он добавляется к списку печенья:

$(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){ 
    .... 
}); 

Может быть, это поможет кто-то когда-то ..

Смежные вопросы