无法使用关键字运行进行分页搜索

时间:2011-10-07 03:45:50

标签: php codeigniter

有没有人知道如何使用CodeIgniter在第二页链接上运行关键字来进行分页搜索?

我想在搜索中添加一个分页。我的关键字搜索似乎工作正常,我使用一个搜索键表单,我可以看到正确的第一页显示,但问题是我无法使第二页链接工作和其他页面链接。假设有两个不同的请求(当用户点击搜索按钮,分页链接时)

如何让分页链接运行?

2 个答案:

答案 0 :(得分:1)

您是否已成功创建分页链接?

您需要有一个名为的CI功能,例如“搜索”。这将采用两个参数,search_query和page。

对于每个页面加载,您需要重新运行搜索查询,但在SQL中使用LIMIT函数仅返回所需的结果,即该页面范围..您还需要在某处设置每页的结果数量

我现在没有我的CI项目发布代码,但你应该按照以下思路思考:

SELECT required_info 来自searchable_table 在哪里searchable_field =“搜索查询” 限制0,49

上述查询将返回包含50个结果的第一页的结果。

要对您使用的第二页执行此操作:LIMIT 50,100等等......

计算第一个参数使用:resultsPerPage * pageNum

答案 1 :(得分:0)

我想在搜索单词时使用分页,我只有一个输入表单。我目前的问题是当我点击第二页或第三页等时,它会显示不属于关键字搜索的数据库的所有数据列表。

有没有人可以帮我解决这个问题?我被困了

以下是当前代码:

控制器

public function index() {
    // If search button doesn't press
    if(!isset($_POST['search'])) {
        // reset the search terms session
        $this->session->unset_userdata($this->tabKeyword);

        // application_search is our view that contains the form
        $this->displayFilm();
    } else {
        $keyword = $this->input->post('keyword');

        if ($keyword) {
            $this->tabKeyword = $keyword;
            // Set keyword value into session
            $this->session->set_userdata('s_keyword', $this->tabKeyword);
        }
        $this->displaySearchResult();
    }   
}


/*
 * Display the search result when using keyword as search item
 * @class   Public
 * @param   void
 * @return  void
 */
public function displaySearchResult() {
    $data['title'] = "Search Results";

    // Get the third parameter defined of segment in URL
    $offset = $this->uri->segment(4);

    // Get total results of keyword search item
    $total_results = $this->film_model->totalSearchCount($this->input->post('keyword'));
    echo 'Total Results: ' . $total_results . "<br/>";

    $getKeyword = $this->session->userdata('s_keyword');
    echo 'Keyword session: ' . $getKeyword . "<br/>";

    $config['base_url'] = base_url() . '/index.php/film_controller/displaySearchResult/' . $getKeyword;
    $config['total_rows'] = $total_results; // Must return the number of keyword search result 
    $config['uri_segment'] = '4';
    $config['per_page'] = $this->results_per_page;

    // Init pagination, add results search items in searchResults array then load it in View
    $this->pagination->initialize($config);

    $data['searchResults'] = $this->film_model->getSearch($this->input->post('keyword'), $this->results_per_page, $offset);
    $this->load->view('film_result', $data);
}


public function displayFilm() {
    $total = $this->film_model->countAll();
    $offset = $this->uri->segment(3);

    $config['base_url'] = base_url() . '/index.php/film_controller/displayFilm';
    $config['total_rows'] = $total; 
    $config['uri_segment'] = '3';
    $config['per_page'] = $this->results_per_page;

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

    $data['results'] = $this->film_model->getData($config['per_page'], $offset);
    $this->load->view('film', $data);
}

模型

function countAll() {
    return $this->db->count_all('film_list');
}


public function getData($limit, $offset) {
    $this->db->select('actors, title, description, category');
    $query = $this->db->get('film_list', $limit, $offset);
    return $query;
}


public function getSearch($keyword, $limit, $offset) {
    $this->db->like('actors', $keyword);
    $this->db->or_like('title', $keyword);
    $this->db->or_like('category', $keyword);
    $this->db->order_by('title', 'ASC');
    $results = $this->db->get('film_list', $limit, $offset);

    return $results->result_array();
}

/*
 * @access  Public
 * @param   keyword
 * @return  void
 */
public function totalSearchCount($keyword) {
    $this->db->like('actors', $keyword);
    $this->db->or_like('title', $keyword);
    $this->db->or_like('category', $keyword);

    return $this->db->count_all_results('film_list');
}