CodeIgniter分页404

时间:2013-03-05 15:32:38

标签: codeigniter pagination codeigniter-2 codeigniter-url codeigniter-routing

我已经检查了几个关于CodeIgniter中的分页的线程,但是我没有找到解决问题的方法。

我有一个位于controllers / admin / index.php的控制器类,名为'Index',包含以下代码:

class Index extends CI_Controller {

    public function __construct() {

        parent::__construct();

        $this->load->helper("url");
        $this->load->helper( 'events_helper' );
        $this->load->helper( 'delegates_helper' );

        $this->load->model( 'admin/event_model' );
        $this->load->model( 'admin/delegate_model' );

        $this->load->library( 'pagination' );

    }

    public function index() {

        $config = array();
        $config['base_url'] = base_url() . 'admin';
        $config['total_rows'] = $this->event_model->record_count();
        $config['per_page'] = 2;
        $config['uri_segment'] = 2;

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

        $page = ( $this->uri->segment( 2 ) ) ? $this->uri->segment( 2 ) : 0;

        $data['paged_events'] = $this->event_model->get_paged_events( $config['per_page'], $page );
        $data['links'] = $this->pagination->create_links();

        $data['events'] = $this->event_model->get_events();
        $data['event_courses'] = $this->event_model->get_event_courses();
        $data['event_suppliers'] = $this->event_model->get_event_suppliers();
        $data['event_venues'] = $this->event_model->get_event_venues();
        $data['event_locations'] = $this->event_model->get_event_locations();
        $data['event_statuses'] = $this->event_model->get_event_statuses();
        $data['event_prices'] = $this->event_model->get_event_prices();
        $data['event_types'] = $this->event_model->get_event_types();
        $data['event_tutors'] = $this->event_model->get_event_tutors();
        $data['event_delegates'] = $this->event_model->get_event_delegates();
        $data['event_delegate_statuses'] = $this->event_model->get_event_delegate_statuses();

        $this->load->view( 'templates/admin/header', $data );
        $this->load->view( 'admin/index', $data );
        $this->load->view( 'templates/admin/footer' );

    }

}

现在,如果我转到localhost / cream / public_html / admin,显示正确数量的结果并显示下一页的链接,但是当我点击下一页或转到第2页或第3页时,我收到404错误。

现在我尝试将我的基本网址更改为:

$config['base_url'] = base_url() . 'admin/index';

$config['base_url'] = base_url() . 'admin/index/';

$config['base_url'] = base_url() . 'admin/';

同时也将我的uri_segment分别改为1,2和3,但我得到的结果相同。

我甚至尝试过使用:

$route['admin/(:num)'] = 'admin/$1';

$route['admin/(:num)'] = 'admin';

仍然,我收到404错误。

这些是我在'Event_Model'类中的模型函数:

    public function record_count() {

        $this->db->select_sum( 'event_active' );
        $this->db->from( 'events' );
        $this->db->where( 'event_active', 1 );
        $query = $this->db->get();
        $total_active_events = $query->row()->event_active;

        if( $total_active_events > 0 ) {

            return $total_active_events;

        }

        return false;

    }

    public function get_paged_events( $limit, $start ) {

        $this->db->limit( $limit, $start );
        $this->db->where( 'events.event_active = 1' );
        $this->db->order_by( 'events.event_start_date', 'asc' );
        $query = $this->db->get( 'events' );

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

            foreach ( $query->result() as $row ) {

                $data[] = $row;

            }

            return $data;

        }

        return false;

    }

我有点卡在这个上,非常感谢你的帮助。感谢。

编辑:添加routes.php

$route['default_controller'] = "index";
$route['404_override'] = '';
$route['admin/(:num)'] = 'admin/index/$1';

4 个答案:

答案 0 :(得分:3)

$route['admin/(:num)'] = 'admin/index/$1';需要驻留在config/routes.php中 - 您无法向控制器方法添加路由。

答案 1 :(得分:1)

好的,我已经知道发生了什么。

当访问第一页以外的分页结果时,我在URI“localhost / cream / public_html / admin / $ 1”,其中$ 1代表页码。

在我的'Admin'控制器代码中,在index()函数下,'$ config ['uri_segment']'属性值需要设置为2.仅此一项不会解决问题,但它是正确的URI段。

接下来,我需要将以下两条路线添加到'routes.php':

$route['admin'] = 'admin/admin';
$route['admin/:num'] = 'admin/admin';

第一条路线是因为我现在已经将我的控制器类名更改为'Admin',并将其文件名更改为'admin.php',所以我需要一条在用户处于以下URI时可以使用的路由:

localhost/cream/public_html/admin/

第二条路线是将页码重新路由到正确的控制器,现在是“admin / admin”。

就是这样。我的分页现在正在运作。

现在我需要做的是让它更改'$ limit'变量,以便通过下拉动态​​动态更改它。我应该能够将下拉列表的值传递给$ _POST并将其拉入我的'get_paged_events();'功能在我的模型中。我会告诉你我是怎么过的。

为所有帮助人员干杯。

答案 2 :(得分:1)

要避免分页中的索引,请按照以下步骤进行操作

Step1:自定义/config/routes.php

   $route['controller/(:num)'] = "controller/index/$1";
   It convert your url www.yourdomian.com/controller/(number) to www.yourdomain.com/controller/index/(number)

第2步:使用 $ config [' uri_segment'] = 2 自定义您的分页代码,如下所示

        $config['base_url'] = base_url().'controller/';
        $config['display_pages'] = TRUE;
        $config['first_link'] = 'First';
        $config['total_rows'] = (your total rows);
        $config['uri_segment'] = 2;
        $this->pagination->initialize($config);
        echo $this->pagination->create_links();

欢呼声..

答案 3 :(得分:0)

您的网络服务器上是否有网址重写?如果不是,请尝试使用localhost / path / to / codeigniter / index.php / admin。如果你想跳过index.php,那么请阅读mod_rewrite(如果你使用的是apache)并查看codeigniter的site_url函数用户指南,该指南可能对生成站内网址很有用。