1

ここで 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 エラーが発生します。

今、ベースURLを次のように変更しようとしました:

$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

4 に答える 4

3

$route['admin/(:num)'] = 'admin/index/$1';に存在する必要がありますconfig/routes.php- コントローラ メソッドにルートを追加することはできません。

于 2013-03-05T15:39:10.063 に答える
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)

Step2:以下のように$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();

乾杯..

于 2013-11-28T06:42:08.840 に答える
1

わかりました、何が起こっているのか理解しました。

最初のページ以外のページ化された結果にアクセスすると、URI 'localhost/cream/public_html/admin/$1' にアクセスしました。ここで、$1 はページ番号を表します。

私の「管理者」コントローラー コードでは、index() 関数の下で、「$config['uri_segment']」プロパティ値を 2 に設定する必要がありました。これだけでは問題は解決しませんでしたが、正しい URI セグメントでした。 .

次に、次の 2 つのルートを「routes.php」に追加する必要がありました。

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

最初のルートは、コントローラーのクラス名を「Admin」に変更し、そのファイル名を「admin.php」に変更したためです。そのため、ユーザーが次の URI にいるときに機能するルートが必要でした。

localhost/cream/public_html/admin/

2 番目のルートは、ページ番号を正しいコントローラー (現在は「admin/admin」) に再ルーティングすることでした。

それだけでした。私のページネーションは現在機能しています。

あとは、「$limit」変数を変更して、ドロップダウンから動的に変更できるようにするだけです。ドロップダウンの値を $_POST に渡し、それを「get_paged_events();」にプルできるはずです。私のモデルで機能します。乗り方をお伝えします。

すべてのヘルプの人々に乾杯。

于 2013-03-06T16:48:04.027 に答える
0

Web サーバーで URL 書き換えを行っていますか? そうでない場合は、localhost/path/to/codeigniter/index.php/admin を試してください。index.php をスキップしたい場合は、mod_rewrite (Apache を使用している場合) について読み、サイト内 URL の生成に役立つ可能性がある site_url 関数について codeigniter のユーザー ガイドを確認してください。

于 2013-03-05T15:39:29.143 に答える