如何在我的搜索页面中获得分页 - codeigniter

时间:2013-05-02 08:31:08

标签: php mysql codeigniter search pagination

我的网站主页上有一个搜索栏。当我搜索公司并点击“搜索”时,它会重定向到页面http://mydomain.com/searchresults。 (注意:我用url路由删除了控制器名称'home')

我的网址中没有任何搜索结果或结果。它只是一个干净的网址。

当我尝试在该页面中实现分页时,它无法正常工作,因为当我转到下一页时,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>

我的搜索结果页面:

<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);

但它不起作用。

我希望很清楚我想要的是什么。

4 个答案:

答案 0 :(得分:0)

据我所知,codeigniter有一个分页类,对于任何类型的分页都非常有用。

我可以看到你添加了配置参数,但没有初始化分页。你甚至没有加载分页库。请按照this加载库并初始化。

我在我的实际网站EduSanjal中使用过它,效果很好。您可以自己搜索并查看。

我希望能回答你的问题。

问候。

答案 1 :(得分:0)

正如@openrijal所说,你似乎没有正确初始化分页库。 我首先尝试按照this one之类的简单示例...以确保您可以对您的记录进行分页。

我认为其中一个主要问题是你没有向你的模型发送限制和当前页面以限制你得到的结果,你只是传递match1 / match2。检查教程并在他的模型中查看该人的“fetch_countries”函数。

对所有结果进行简单分页后,请将搜索字词附加到您的分页链接,这样您也可以将其传递给模型(添加其他参数)以进一步限制搜索结果

答案 2 :(得分:0)

这是我不喜欢codeigniter的原因之一。当一点点复杂化时,它承诺一切都会失败。

尽管如此,这是一种肮脏的处理方式。

首先,您需要从GET变量构建查询字符串。但在此之前,您需要取消设置$_GET['page']变量。 (CI自动添加它。)

因此代码变成.....

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

现在使用其余搜索标准构建查询。

$q = http_build_query($_GET);

现在将基本网址更改为以下内容:

$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();
    }

在这里,您只能自动加载库。不是配置。你需要在方法中设置它。

答案 3 :(得分:0)

我昨天解决了这个问题。让这项工作真是一项艰巨的任务。 有两个人帮我聊天,所以我们可以尝试一些没有很多评论的东西。

请在此处查看解决方案:$offset not working for pagination codeigniter

也是之前的问题:

Records not limited on searchpage using codeigniter pagination