Я искал учебники повсюду, но просто не могу показаться хорошим …
проблема: работа с разбивкой по страницам, сортировка работала, но не может заставить их работать вместе. добавьте к этому, получая фильтры, работающие с разбитым на страницы и отсортированным набором результатов
Я хочу, чтобы эта работа работала только с 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> </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> </td>'; echo '</tr>'; } ?> </tbody>
вот как выглядит 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, поступившую чуть позже.