Codeigniter分页链接在第一页后不起作用

时间:2014-03-04 09:10:05

标签: codeigniter search hyperlink pagination

我有一个搜索字段,我想用分页显示结果。

在第一个结果页面中,每件事情都运作良好,但在其他页面中,没有任何错误就显示出来,并且当回到第一页时也会注意到。

我把发布的密钥放在会话中以避免丢失它。

但仍然注意到。

这是我的控制者:

  public function search()
{


    $this->session->set_userdata('searched',$this->input->post('searchterm'));
    $searchterm = $this->session->userdata('searched');
    $limit = ($this->uri->segment(3) > 0)?$this->uri->segment(3):0;

    $config['base_url'] = base_url() . 'home/search';
    $config['total_rows'] = $this->home_model->search_record_count($searchterm,$language);
    $config['per_page'] = 10;
    $config['uri_segment'] = 3;
    $config['display_pages'] = TRUE; 
    $choice = $config['total_rows']/$config['per_page'];
    $config['num_links'] = 3;       
    $this->pagination->initialize($config);

    $data['results'] = $this->home_model->search($searchterm,$limit,$language);
    $data['links'] = $this->pagination->create_links();
    $data['searchterm'] = $searchterm;
    $data['total']= $this->home_model->search_record_count($searchterm,$language);      


        putHeader();
        putTop();
        putTopmenu();
        putSearch($data);
        putFooter();
}

这是我的模特:

  public function search_record_count($searchterm)
{
  $sql = "SELECT COUNT(*) As cnt FROM content WHERE body LIKE '%" .  $searchterm . "%'";
  $q = $this->db->query($sql);
  $row = $q->row(); 
  return $row->cnt;
}

public function search($searchterm,$limit)
{

    $data = $this->db
                    ->select('content.title,content.id,content.category,content.body,path')
                    ->from('content')   
                    ->join('categories','noor_content.category = categories.id')                    
                    ->like('noor_content.title', $searchterm)
                    ->like('noor_content.body', $searchterm)
                    ->limit("5")        
                    ->order_by("content.id","DESC")
                    ->get();

    if($data->num_rows() > 0)
    {

        return $data->result();
        //print_r($data);exit();
    }
    else
    {

        return 0;
    }
}

2 个答案:

答案 0 :(得分:0)

问题是您不是根据分页限制查询。在您的控制器中,您将获得第3个URL段

$limit = ($this->uri->segment(3) > 0)?$this->uri->segment(3):0;

并将它传递给你模特,但是你没有做任何事情。在你的模型中,你想做类似

的事情
$data = $this->db
    ->select('content.title,content.id,content.category,content.body,path')
    ->from('content')   
    ->join('categories','noor_content.category = categories.id')                    
    ->like('noor_content.title', $searchterm)
    ->like('noor_content.body', $searchterm)
    ->limit("10, " . $limit) //Edited this line     
    ->order_by("content.id","DESC")
    ->get();

答案 1 :(得分:0)

我认为你应该使用method ='get'而不是post ...我的意思是这样的事情......

<form method="get" action="your_controller/your_function">
   //your search form 
</form>

使用get而不是post你不必使用任何会话变量,你可以在控制器中轻松访问它们

$this->input->get('feild_name');

此外,您不会遇到第二页或任何其他页面的问题,因为所有搜索字段都会附加到网址中,您可以使用$this->input->get('feild_name');轻松访问它,直到您的网址更改为其他内容..我也会节省你的编码..