CodeIgniter搜索结果分页 [英] CodeIgniter Search Results Pagination

查看:63
本文介绍了CodeIgniter搜索结果分页的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好吧,我已经四处搜寻,但是仍然找不到解决我问题的方法.我仍然对php和codeigniter还是陌生的,所以也许我已经错过了答案了,但是无论如何,这就是我想要做的事情.

Well I've searched and searched all around but I still can't find a solution to my problem. I'm still new to php and codeigniter so maybe I missed the answer already but anyways, here's what I'm trying to do.

这是我的控制器(c_index.php)-调用搜索功能并对结果数组执行分页.

This is my Controller (c_index.php) - calls a search function and performs pagination on the resulting array.

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class C_index extends CI_Controller {


public function __construct()
{
    parent::__construct();
    $this->load->model('m_search');
    $this->load->library("pagination");
    $this->load->library("table");
}
/** Index Page for this controller */
public function index()
{
    if($this->session->userdata('logged_in')){
        $this->load->view('v_user');    
    }   
    else{
        $this->load->view('index'); 
    }
}

public function search() 
{
            // start of search
    $search_term = $this->input->post('word');
    $books = $this->m_search->search_books($search_term);

            // start of pagination
    $config['base_url'] = "http://localhost/test/index.php/c_index/search";
    $config['per_page'] = 5;
    $config['num_links'] = 7;
    $config['total_rows'] = count($books);

    echo $config['total_rows'];
    $this->pagination->initialize($config);
    $data['query'] = array_slice($books,$this->uri->segment(3),$config['per_page']);
    $this->load->view("index",$data);

}

}

这是我的观点(index.php)-基本上只显示分页结果

Here's my view (index.php) - basically just displays the pagination result

<h3> Search Results </h3>   
    <!-- table -->              
    <table class="table table-condensed table-hover table-striped" id="result_table">
        <tbody>
        <?php
        if(isset ($query)){
            if(count($query)!=0){
                foreach($query as $item){
                echo "<tr><td>". $item['title'] ." by " .$item['author'] ."<br/></td></tr>";
                }
                echo $this->pagination->create_links();
            }
            else
            {
                echo "No results found for keyword ' ". $this->input->post('word')." ' .";
            }
        }
        else
        {
            echo "Start a search by typing on the Search Bar";
        }
        ?>              
        </tbody>
    </table>

我的模型(m_search.php)-基本上搜索数据库并返回结果数组.

My model (m_search.php) - basically searches the database and returns an array of results.

<?php

M_search类扩展了CI_Model {

class M_search extends CI_Model{

function search_books($search_term='default')
{

    $filter = $this->input->post('filter');
    //echo $filter;

    if($filter == 'title')
    {
        //echo 'title';
        $this->db->select('*');
        $this->db->from('book');
        $this->db->like('title',$search_term);
        // Execute the query.
        $query = $this->db->get();
        return $query->result_array();

    }else if($filter == 'author')
    {
        //echo 'author';
        $this->db->select('*');
        $this->db->from('book');
        $this->db->like('author',$search_term);
        // Execute the query.
        $query = $this->db->get();
        return $query->result_array();

    }else if($filter == 'type')
    {
        //echo 'type';
        $this->db->select('*');
        $this->db->from('book');
        $this->db->like('book_type',$search_term);
        // Execute the query.
        $query = $this->db->get();
        return $query->result_array();

    }else if($filter == 'status')
    {
        //echo 'status';
        $this->db->select('*');
        $this->db->from('book');
        $this->db->like('book_status',$search_term);
        // Execute the query.
        $query = $this->db->get();
        return $query->result_array();
    }else
    {
        //echo 'all';
        $this->db->select('*');
        $this->db->from('book');
        $this->db->like('book_status',$search_term);
        $this->db->or_like('book_type',$search_term);
        $this->db->or_like('author',$search_term);
        $this->db->or_like('title',$search_term);
        // Execute the query.
        $query = $this->db->get();
        return $query->result_array();
    }

}

}

现在我的问题是保留分页结果.

Now my problem is keeping the results for the pagination.

第一页很好,但是只要我单击页面链接,表上的结果就会显示整个数据库,而不仅限于我的搜索结果.

The first page is fine but whenever I click on a page link, the results on the table show the whole database and is not limited to my search results.

我读过某个地方,我需要使用会话来保留我的search_term,以便它在我切换页面时起作用,但我不知道将其放在何处. 任何意见或建议,将不胜感激.谢谢.

I've read somewhere that I need to use sessions to keep my search_term so that it works when I switch pages but I don't know where to put it. Any advice or suggestions would be greatly appreciated. Thanks.

推荐答案

根据您的需要,有几种不同的方法来处理搜索和分页.根据您现有的代码,这就是我要做的.

There are several of different ways to handle search and pagination depending on your needs. Based on your existing code, this is what I would do.

更改

$search_term = $this->input->post('word');

$search_term = ''; // default when no term in session or POST
if ($this->input->post('word'))
{
    // use the term from POST and set it to session
    $search_term = $this->input->post('word');
    $this->session->set_userdata('search_term', $search_term);
}
elseif ($this->session->userdata('search_term'))
{
    // if term is not in POST use existing term from session
    $search_term = $this->session->userdata('search_term');
}

这篇关于CodeIgniter搜索结果分页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆