2013-05-02 92 views
-1

我在我的網站的主頁上有一個搜索欄。當我搜索公司並點擊'搜索'時,它會重定向到頁面http://mydomain.com/searchresults。 (注:我通過網址路由刪除了控制器名稱'home')如何在我的搜索頁面中獲得分頁 - codeigniter

我沒有任何搜索器或結果在我的網址中。這只是一個乾淨的網址。

當我嘗試在該頁面中實施分頁時,它不起作用,因爲當我進入下一頁時,searchterm消失了,它顯示我的數據庫中的所有公司。

我如何在此頁面上添加分頁?

我的控制器:

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'; } 
     $data['query'] = $this->bedrijven_model->get_search($match, $match2); 

     $this->load->view('views/header'); 
     $this->load->view('views/searchresults', $data); 
     $this->load->view('views/footer'); 
     $data['query'] = $this->bedrijven_model->bedrijven_tags(); 
    } 

我的模型:

function get_search($match, $match2) 
{ 
    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 LIKE '%".$this->input->post('cookie')."%') 

     GROUP BY `bedrijfcategorieen`.`idbedrijven`"; 
     $result = $this->db->query($query); 

     return $result->result(); 
} 

我的搜索頁面:

<form name="input" action="searchresults" method="post"> 
<input type="search" onchange="validate()" placeholder="Zoeken..." name="search" size="70"> 
<input type="search" onchange="validate()" required="true" size="14" placeholder="Postcode..." name="cookie" value="<?= $this->input->cookie('postcode', TRUE); ?>" > 

<input type="submit" value="Zoeken"> 

</form> 

我的SearchResult所頁:

<div id="bigcontent"> 
<h1>Companies found: <?= count($query); ?></h1> 
<?= br(1); ?> 
<h2>Company:</h2> 
<?= br(1); ?> 
<?= $this->pagination->create_links(); ?> 
<?= br(2); ?> 
<hr/> 
<?php foreach($query as $item):?> 
    <a href="<?php echo base_url()?>bedrijven/<?= $item->idbedrijven?>"><h3><?= $item->Bedrijfsnaam ?></h3></a> 
    <p><b>Categorie:</b> <?= $item->Categorie ?></p> 
    <p><small><?php echo $item->Profiel ?></p> 
    <p><b><?php echo $item->Email ?></b></p> 
    <p><b>Postcode:</b> <?php echo $item->Postcode ?></p> 
    <p><b>Tags:</b></p> 
    </small> 
    <hr/> 
<?php endforeach;?> 
<br /> 
<<<a href="<?php echo base_url() ?>">Terug</a> 

我想是這樣的:

(我裝分頁庫在我autoload.php文件)

$config['base_url'] = 'http://kees.een-site-bouwen.nl/home/searchresults'; 
$config['total_rows'] = $data['query']; 
$config['per_page'] = 4; 

$this->pagination->initialize($config); 

,但沒有奏效。

我希望很清楚我想要什麼。

+0

在模型中嘗試更換'$這個 - >輸入 - >後( '搜索')與' '$ match'。您已將'$ this-> input-> post('search')'分配給您的控制器中的'$ match'。 – 2013-05-02 08:43:13

+0

「搜索」是我的搜索框的名稱。沒有我不能搜索。 – 2013-05-02 08:46:36

+0

是的。你已經將它的值賦給你的控制器中的'$ match'變量。 '$ match = $ this-> input-> post('search');'然後你調用模型'$ this-> bedrijven_model-> get_search($ match,$ match2);'。在您的模型中存在的函數get_search($ match,$ match2)中,$ match值將包含您的「搜索輸入值」。您也可以在模型中使用'$ this-> input-> post('search');'但MVC的整個概念將毫無意義。 – 2013-05-02 08:51:56

回答

0

據我所知,codeigniter有一個分頁類,這對任何分頁都非常有用。

我可以看到你已經添加了配置參數,但沒有初始化分頁。你甚至沒有加載分頁庫。請按照this來加載並初始化庫。

我用它在我的活網站EduSanjal,它運作良好。你可以自己搜索並查看。

我希望能回答你的問題。

問候。

+0

我在autoload.php中加載了這個庫。將添加到我的問題。我還添加了$ this-> pagination-> initialize,但我只是添加了我嘗試過的選項。這根本不能回答我的問題。 – 2013-05-02 08:41:31

0

正如@openrijal提到,它似乎並沒有正確初始化分頁庫。 我會首先嚐試並遵循一個簡單的例子,如this one ...只是爲了確保您可以通過記錄進行分頁。

我認爲一個主要的問題是,您沒有發送限制和當前頁面到您的模型,以限制您返回的結果,您只是傳遞match1/match2。檢查教程,看看他的模型中的傢伙的「fetch_countries」功能。

一旦您完成所有的結果都簡單分頁然後附加搜索詞分頁鏈接,所以你也可以把它傳遞給模型(添加其他參數),以限制搜索結果進一步

0

這是一爲什麼我不喜歡codeigniter的原因。它承諾給一切都失敗時,一點點複雜性出現。

無論如何,這裏是一個骯髒的方式來處理。

1您需要從GET變量中構建查詢字符串。但在此之前,您需要取消設置$_GET['page']變量。 (CI自動添加它)。

因此代碼變得.....

if(isset($_GET['page']))unset($_GET['page']); 

現在建立與搜索審覈規定的其他查詢。

$q = http_build_query($_GET); 

現在改變基本URL如下:

$config['base_url'] = 'http://kees.een-site-bouwen.nl/home/searchresults?'.$q 

就是這樣。


更新

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'; } 
     $data['query'] = $this->bedrijven_model->get_search($match, $match2); 


     /*--- here comes the part --*/ 

     if(isset($_GET['page']))unset($_GET['page']); 
     $q = http_build_query($_GET); 

     // Rest pagination code as shown in CI docs. 

     $this->load->view('views/header'); 
     $this->load->view('views/searchresults', $data); 
     $this->load->view('views/footer'); 
     $data['query'] = $this->bedrijven_model->bedrijven_tags(); 
    } 

在這裏,你可以只自動加載磁帶庫。不是配置。你需要設置它的方法。

+0

'這是我不喜歡codeigniter的原因之一。它承諾給一切都失敗,當一點點複雜性出現時。「哦,是的,有時我對此感到厭惡。無論如何。謝謝我會試試這個:) – 2013-05-02 08:50:20

+0

無法讓它工作。我知道分頁是如何用於正常記錄的。但它不適用於我的搜索頁,因爲它例如當我點擊第2頁時刪除了我的searchterm。 – 2013-05-02 08:57:34

+0

發佈處理搜索的方法。你需要在那裏添加上面的代碼。 – itachi 2013-05-02 09:00:44