2013-10-01 7 views
2

я это Paginate with search result реализован в мой CI проект, однако я не мог иметь мои постраничной ссылки перейти на следующую страницу, например:Codeigniter пагинация ссылка перейти на 404 Страница не найдена

моей странице поиска, когда он первый загружен http://localhost/ci_project/search, когда я щелкнул пейджинговую ссылку, которая перейдет на http://localhost/ci_project/search/2, страница отображается 404 Page Not Found.

Может кто-нибудь, пожалуйста, помогите мне разобраться, что случилось в моем коде? Я пробовал много предложений по решению, но не могу помочь, большая часть проблемы исходит от $config['base_url'] = base_url('search');, но ни одна из них не помогает.

Модель:

public function do_search_count($keywords) 
{ 
    $sql = "SELECT COUNT(*) AS cnt FROM products WHERE MATCH (name, manufacturer) AGAINST ('".$keywords."')"; 
    $q = $this->db->query($sql); 
    $row = $q->row(); 
    return $row->cnt; 
} 

public function do_search($keywords, $per_page, $limit) 
{ 
    $this->db->escape($keywords); 

    $this->db->where('MATCH (name, manufacturer) AGAINST ("'.$keywords.'") LIMIT '.$per_page.', '.$limit, NULL, FALSE); 
    $query = $this->db->get('products'); 

    if($query->num_rows() > 0){ 
     return $query->result(); 
    }else{ 
     return false; 
    } 
} 

Контроллер:

function search() 
{ 
    $keywords = $this->input->post('search'); 

    $searchterm = $this->db_model->searchterm_handler($this->input->get_post('search', TRUE)); 
    $limit = ($this->uri->segment(2) > 0)?$this->uri->segment(2):0; 

    $config['base_url'] = base_url('search'); 
    $config['total_rows'] = $this->db_model->do_search_count($searchterm); 
    $config['per_page'] = 5; 
    $config['uri_segment'] = 2; 
    $config['use_page_numbers'] = TRUE; 
    $choice = $config['total_rows']/$config['per_page']; 
    $config['num_links'] = round($choice); 

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

    $data['results'] = $this->db_model->do_search(trim($keywords), $limit, $config['per_page']); 
    $data['pagination'] = $this->pagination->create_links(); 
    $data['searchterm'] = $searchterm; 

    $data['total'] = count($data['results']); 
    $data['title'] = 'Search'; 

    $this->load->view('header', $data); 
    $this->load->view('search', $data); 
    $this->load->view('footer', $data); 
} 

Спасибо.

ответ

2

Try:

$config['base_url'] = base_url('controller_name/search'); 
$config['uri_segment'] = 3; 
+0

это работает, но когда я иду на странице 2, никакие записи не отображается, и это происходит со страницы 2 на страницу 1 – conmen

+1

Для этого вам нужно проверить свой запрос, что лимит и смещение установлены правильно или нет. Используйте '$ this-> db-> last_query()' для вывода вашего запроса. Подумайте о принятии ответа, если он вам поможет. –

+0

@ Nil'z my $ this-> db-> last_query() показывает 'SELECT * FROM user_data LIMIT 5' на первой странице, но когда я нажимаю 'page 2', он перемещается в' object not found 404' :(PLS help me Чтобы решить :( –

0

http://localhost/ci_project/search/2 в CodeIgniter, вероятно, пытается выполнить метод, называемый 2 с обычной конфигурацией, если ваш метод search обязательно вызвать URL в http://localhost/ci_project/search_controller/search/2.

Если вы хотите изменить конфигурацию какой-то причине, вы можете начать Diggin here

+0

У меня есть переназначение '$ route ['search/(: num) '] =' search_controller/search/$ 1 '; 'в routes.php теперь мои ссылки в папках работают, но когда я перехожу на следующую страницу' http: // localhost/irenov/search/2', , не осталось записей? – conmen

Смежные вопросы