помощь по созданию базовой поисковой системы php

Я искал учебники повсюду, но просто не могу показаться хорошим …

  1. страница поиска с разбивкой по страницам, сортировка заголовков столбцов и множественная фильтрация (фильтры находятся в флажках)

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

Я хочу, чтобы эта работа работала только с php и с методами GET form (javascript приходит позже, я хочу применить прогрессивное усовершенствование на этом)

я не знаю, как сделать три функции (разбиение на страницы, сортировка и фильтрация) работать вместе … хочу, я хочу достичь

вот мой код для контроллера

function index(){ $resultset = null; if ($this->input->get()){ // searching if ($this->input->get('keyword')){ $resultset = $this->hotel->searchterm($_GET['keyword']); } if (!$this->input->get('keyword')){ $searchkeys = array(); foreach($_GET as $key => $value){ $searchkeys[$key] = $value; } $resultset = $this->hotel->searchcat($searchkeys); } // sorting if ($this->input->get('sortby')){ $resultset = $this->hotel->sortdefault($_GET['sortby']); } if ($this->input->get('keyword') && $this->input->get('sortby')){ $resultset = $this->hotel->sortdefault($_GET['sortby']); } }else{ $resultset = ORM::factory('hotel')->limit(15)->find_all(); } $this->template->title = 'The Hotel Inventory :: Search'; $this->template->sidebar = new View('search-sidebar'); $this->template->featured = new View('search-details'); $this->template->featured->data = $resultset; } 

что касается функций библиотеки гостиницы:

 public function sortdefault($sort, $resultset=null){ if (!$this->session->get('sortorder')){ $_SESSION['sortorder'] = 'asc'; }else if ($this->session->get('sortorder') == 'asc'){ $_SESSION['sortorder'] = 'desc'; }else{ $_SESSION['sortorder'] = 'asc'; } $sortorder = $this->session->get('sortorder'); $sortby = ''; switch ($sort){ case 'name' : $sortby = 'name'; break; case 'location': $sortby = 'location'; break; case 'price' : $sortby = 'price'; } if (is_null($resultset)){ $query = ORM::factory('hotel')-> select('id, name, location, room, price, date_added, url_path')-> limit(15)->orderby($sortby, $sortorder)->find_all(); } return $query; } 

как для таблицы в представлении:

 <table id="tableresults" cellpadding="0" cellspacing="0" border="1" > <thead> <tr style="height: 20px;"> <th>Image</th> <th><?php echo (isset($_SESSION['searchterm'])) ? html::anchor('search/index?keyword=' . $_SESSION['searchterm'] . '&sortby=name','Hotel Name') : html::anchor('search/index?sortby=name','Hotel Name');?></th> <th><?php echo html::anchor('search/index?sortby=location','Location');?></th> <th><?php echo html::anchor('search/index?sortby=price','Price');?></th> <th>Actions</th> </tr> </thead> <tbody> <?php foreach($data as $d){ echo '<tr class="result">'; echo '<td>&nbsp;</td>'; echo '<td>' . html::anchor('hotel/' . $d->url_path, $d->name) . '</td>'; echo '<td>' . $d->location . '</td>'; echo '<td>USD ' . $this->util->money($d->price); echo '<td>&nbsp</td>'; echo '</tr>'; } ?> </tbody> 
  1. пользователь ищет элемент (одноразовый поиск) или использует несколько категорий (многопользовательский поиск)
  2. результаты разбиты на страницы, представлены в таблицах, каждый заголовок столбца со ссылками на метод сортировки (sort.php? by = title)
  3. пользователь получает возможность фильтровать отсортированную таблицу (или если он / она не выполняет сортировку, тогда текущая таблица будет отфильтрована)

вот как выглядит URL-адрес, если я применяю все фильтры (без страниц и сортировки пока):

 http://localhost/thi/search/index.html?filter[]=featured&filter[]=bankowned&filter[]=new&filter[]=owner&filter[]=broker&filter[]=bank 

теперь это выглядит беспорядочно, но я предполагаю, что это как раз с поисковыми URL-адресами 🙂

я не знаю, как сделать три функции (разбиение на страницы, сортировка и фильтрация) работать вместе … хочу, я хочу достичь

Представления GET немного отличаются от отправки POST, поскольку вы передаете все свои переменные одним выстрелом с помощью отправки INPUT.

Таким образом, чтобы передать те же данные с помощью GET submit, вам необходимо передать каждую переменную в ссылку A HREF.

Чтобы построить это, попробуйте что-то вроде этого:

 $URLsubmit=(TheSubmitURL).'?'; foreach ($submit_data as $key => $value) { $URLsubmit.=$key.'='.$value.'&'; } $URLsubmit = substr($URLsubmit,0,strlen($URLsubmit)-1); // remove last '&' 

Естественно, вы захотите очистить URL-адрес данных и создать счетчики для увеличения разбивки на страницы с каждой ссылкой на страницу HREF.

 echo '<A HREF="'.$URLsubmit.'">'; 

Надеюсь, это укажет вам в правильном направлении.

BTW, используя $ _SESSION, как вы его используете, является большой угрозой безопасности, если вы не настроили cookie сеанса и не используете проверку XSRF.

поправьте меня если я ошибаюсь. Но один из способов сделать это – установить фильтр в переменную GET

Затем вы можете создать автономное PHP-решение и javascript, поступившую чуть позже.