!!! Периодически занимаюсь саморазвитием. Когда-то давно назрел вопрос постраничной навигации результатов поиска.
Совсем недавно уложила в голове работу с сессиями, но до конца осознать и прикрутить к выводу результатов поиска не получается.
Как сделать, так чтобы не терялся результат поиска ещё и пагинация продолжала корректно работать? Понятно, что полученные переменные от запроса и пагинации надо засунуть в сессии. Вопрос - как?
только, чур, не смеяться))) тяжко мне даётся это, ох тяжко...
public function action_search()
{
$find_id = $this->request->param('id');//привязка к идентификатору
//поиск заказов
if(isset($_POST['btnsrch']))
{
//валидация
$_POST = Arr::map('trim', $_POST);
$post = Validation::factory($_POST);
$post -> rule('search', 'not_empty');
if($post -> check())//если данные прошли проверку
{
$all = DB::select(DB::expr('COUNT(*) AS mycount'))
->from('main')
->join('apparat')
->on('apparat.apparat_id', '=', 'main.apparat_id')
->join('made')
->on('made.made_id', '=', 'main.made_id')
->join('customer')
->on('customer.customer_id', '=', 'main.customer_id')
->join('master')
->on('master.master_id', '=', 'main.master_id')
->join('check')
->on('check.check_id', '=', 'main.check_id')
->where_open()
->where('customer.fio','like', $_POST['search'].'%')
->or_where('zakaz_id','like', $_POST['search'])
->or_where('customer.adres','like',$_POST['search'].'%')
->or_where('customer.tels','like',$_POST['search'])
->or_where('apparat','like',$_POST['search'].'%')
->or_where('made','like',$_POST['search'].'%')
->or_where('broken','like',$_POST['search'].'%')
->or_where('sn','like', $_POST['search'].'%')
->or_where('model','like',$_POST['search'].'%')
->where_close()
->execute()
->get('mycount');
//создание ссылок установка значений
$pagination = Pagination::factory(array('total_items' => $all, 'items_per_page'=>1));
$search = DB::select('main.*','customer.*','master.master','made.*','apparat.*','check.*')
->from('main')
->join('apparat')
->on('apparat.apparat_id', '=', 'main.apparat_id')
->join('made')
->on('made.made_id', '=', 'main.made_id')
->join('customer')
->on('customer.customer_id', '=', 'main.customer_id')
->join('master')
->on('master.master_id', '=', 'main.master_id')
->join('check')
->on('check.check_id', '=', 'main.check_id')
->where_open()
->where('customer.fio','like', $_POST['search'].'%')
->or_where('zakaz_id','like', $_POST['search'])
->or_where('customer.adres','like',$_POST['search'].'%')
->or_where('customer.tels','like',$_POST['search'])
->or_where('apparat','like',$_POST['search'].'%')
->or_where('made','like',$_POST['search'].'%')
->or_where('broken','like',$_POST['search'].'%')
->or_where('sn','like', $_POST['search'].'%')
->or_where('model','like',$_POST['search'].'%')
->where_close()
->order_by('zakaz_id', 'DESC')
->limit($pagination->items_per_page)
->offset($pagination->offset)
->execute()
->as_array();
// формирование ссылок, разбиение на страницы
$page = $pagination->render();
}
else //если в поле поиска ниче не введено
{
Session::instance()->set('error', 'Ничего не введено в поле поиска');
}
}
//здесь я начинаю чудит с сессиями
Session::instance()->set('page_links', $page);
Session::instance()->set('search', $search);
Session::instance()->set('count', $all);
$page_links = Session::instance()->get('page_links');
$finds = Session::instance()->get('user_id');
$count = Session::instance()->get('count');
$content = View::factory('searchview')
->bind('page_links', $page_links) //постраничная навигация
->bind('finds', $finds)
->bind('count', $count)
;
$this->template->content = $content;
}
естественно все работает неправильно, как только я перехожу на n-страницу, то мне вылетает пойманная ошибка Session::instance()->set('error', 'Ничего не введено в поле поиска'), работает только роут формируя ссылку "rbt/getin/search/1/2"