Я пытаюсь реализовать Pagination на странице поиска. Я вчера задал этот вопрос без каких-либо результатов. Записи не ограничивались поисковой страницей, используя разбиение на код
и проблема, которая у меня сейчас, немного отличается.
ситуация
Мои ссылки на страницы работают, и я вижу изменение URL-адреса следующим образом: http://example.com/home/searchresults/2 (для второй страницы разбивки на страницы) и т. Д. Но показаны все результаты поиска. Когда я изменяю лимит на 1, я получаю больше ссылок, так что он работает правильно.
Вопрос
Что может быть эта глупая проблема? Я думаю, что это связано с моим Total_rows
Мой контроллер:
function searchresults() { $this->breadcrumbs->page = array('link'=> base_url().'home/search' ,'title' => 'Bedrijven Zoeken' ); $this->breadcrumbs->method = array('link'=> base_url().'home/searchresults' ,'title' => 'Zoekresultaten' ); $data['breadcrumbs'] = $this->breadcrumbs->get(); $match = $this->input->post('search'); if(strlen($this->input->post('cookie')) > 0){ $match2 = $this->input->post('cookie'); } else{ $match2 = '9101'; } $this->load->library('pagination'); $limit = 4; $offset=($this->uri->segment(3)) ? $this->uri->segment(3) : 0; $config['base_url'] = base_url().'home/searchresults/'; $config['total_rows'] = count($this->bedrijven_model->get_search($match, $match2, $limit, $offset )); $config['per_page'] = $limit; $config['use_page_numbers'] = TRUE; $config['num_links'] = 5; $this->pagination->initialize($config); $offset = $this->uri->segment(3); $data['links'] = $this->pagination->create_links(); //$data['query'] = $this->bedrijven_model->get_search($match, $match2, 2147483647, 0); /*large number as limit to retrieve all the rows*/ $data['query_curr'] = $this->bedrijven_model->get_search($match, $match2, $config['per_page'], $this->uri->segment(3) ); $this->load->view('views/header'); $this->load->view('views/searchresults', $data); $this->load->view('views/footer'); }
Моя модель:
function get_search($match, $match2, $limit, $offset=0) { if(!isset($_SESSION)) { session_start(); }; /* $string = implode($_SESSION['postcodes'], '|'); $string2 = $_SESSION['searched_post_code']; */ $postcodes = (is_array($_SESSION['postcodes']) ? $_SESSION['postcodes'] : array()); $postcodes[] = $_SESSION['searched_post_code']; $postcodes = array_filter(filter_var_array($postcodes, FILTER_VALIDATE_INT)); $string = join(',', $postcodes); if (!isset($_COOKIE['cookie'])) { $query = "SELECT * FROM (`bedrijfcategorieen`) JOIN `bedrijven` ON `bedrijfcategorieen`.`idbedrijven` = `bedrijven`.`idbedrijven` JOIN `categorieen` ON `bedrijfcategorieen`.`idcategorieen` = `categorieen`.`idcategorieen` WHERE (`Bedrijfsnaam` LIKE '%".$this->input->post('search')."%' OR `Plaats` LIKE '%".$this->input->post('search')."%' OR `Telefoonnummer` LIKE '%".$this->input->post('search')."%' OR `Email` LIKE '%".$this->input->post('search')."%' OR `Website` LIKE '%".$this->input->post('search')."%' OR `Profiel` LIKE '%".$this->input->post('search')."%' OR `Adres` LIKE '%".$this->input->post('search')."%' OR `Categorie` LIKE '%".$this->input->post('search')."%') AND (Postcode IN ($string)) GROUP BY `Categorie`, `bedrijfcategorieen`.`idbedrijven`"; $query = $this->db->query($query); $this->db->limit($limit, $offset); echo '<pre>'; echo '</pre>'; $result = $query->result_array(); return $result; }
Надеюсь, кто-то может мне помочь. Я борюсь с этим уже почти 3 часа.
Вам нужен ваш лимит / смещение внутри строки $query
:
$query = "SELECT * FROM (`bedrijfcategorieen`) JOIN `bedrijven` ON `bedrijfcategorieen`.`idbedrijven` = `bedrijven`.`idbedrijven` JOIN `categorieen` ON `bedrijfcategorieen`.`idcategorieen` = `categorieen`.`idcategorieen` WHERE (`Bedrijfsnaam` LIKE '%".$this->input->post('search')."%' OR `Plaats` LIKE '%".$this->input->post('search')."%' OR `Telefoonnummer` LIKE '%".$this->input->post('search')."%' OR `Email` LIKE '%".$this->input->post('search')."%' OR `Website` LIKE '%".$this->input->post('search')."%' OR `Profiel` LIKE '%".$this->input->post('search')."%' OR `Adres` LIKE '%".$this->input->post('search')."%' OR `Categorie` LIKE '%".$this->input->post('search')."%') AND (Postcode IN ($string)) GROUP BY `Categorie`, `bedrijfcategorieen`.`idbedrijven` LIMIT ".$offset.", ".$limit; $result = $this->db->query($query); return $result->result_array();
$this->db->limit
работает только с активными записями. В любом случае, измените свой запрос на этот
$query = "SELECT * FROM (`bedrijfcategorieen`) JOIN `bedrijven` ON `bedrijfcategorieen`.`idbedrijven` = `bedrijven`.`idbedrijven` JOIN `categorieen` ON `bedrijfcategorieen`.`idcategorieen` = `categorieen`.`idcategorieen` WHERE (`Bedrijfsnaam` LIKE '%".$this->input->post('search')."%' OR `Plaats` LIKE '%".$this->input->post('search')."%' OR `Telefoonnummer` LIKE '%".$this->input->post('search')."%' OR `Email` LIKE '%".$this->input->post('search')."%' OR `Website` LIKE '%".$this->input->post('search')."%' OR `Profiel` LIKE '%".$this->input->post('search')."%' OR `Adres` LIKE '%".$this->input->post('search')."%' OR `Categorie` LIKE '%".$this->input->post('search')."%') AND (Postcode IN ($string)) GROUP BY `Categorie`, `bedrijfcategorieen`.`idbedrijven` LIMIT $offset,$limit"; $query = $this->db->query($query);
Еще одна вещь, не нужно использовать $ this-> db-> limit