1

私は、数百から数千のアイテムを含む、多くのページ分割されたページを持つ Web サイトを構築しています。現在のページに表示されているアイテムの範囲を次のように表示したい:

| | 300のうち115-130 |

私はこれを試しましたが、正しく動作しません

echo "Showing ".( $page == 1 ? 1 : ($page -1) * $config["per_page"] +1 )." to ".($page *  $config["per_page"])." item of ".$config["total_rows"];

私のコントローラーの現在のコードは次のとおりです。

class Home extends CI_Controller {

function __construct()
{
    parent::__construct();
    $this->load->library("pagination");
}

public function index()
{
    $this->load->model('status_model');//load the status model

    //pagination config
    $config = array();
    $config["base_url"] = site_url() . "/home/index";
    $config["total_rows"] = $this->status_model->count_active_entries();//Get the total number of rows
    $config["per_page"] = 1;
    $config["uri_segment"] = 3;
    $config["anchor_class"] = 'class="normal" ';
    $config['full_tag_open'] = '<ul>';
    $config['full_tag_close'] = '</ul>';
    $config['first_tag_open'] = '<li>';
    $config['first_tag_close'] = '</li>';
    $config['next_link'] = 'Next';
    $config['next_tag_open'] = '<li>';
    $config['next_tag_close'] = '</li>';
    $config['last_tag_open'] = '<li>';
    $config['last_tag_close'] = '</li>';
    $config['prev_link'] = 'Prev';
    $config['prev_tag_open'] = '<li>';
    $config['prev_tag_close'] = '</li>';
    $config['cur_tag_open'] = '<li class="num_active">';
    $config['cur_tag_close'] = '</li>';
    $config['num_tag_open'] = '<li>';
    $config['num_tag_close'] = '</li>';


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

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

    $statuses = $this->status_model->get_entries($config["per_page"], $page); //call the method to get all the active statuses

    if($statuses !== false) { 

        $content_data['results'] = $statuses;
    }
    else { // If no results are returned display the following error message

        $content_data['error'] = 'Error no status updates are being returned from the database. Please contact an administrator.';
    }

    echo "Showing ".( $page == 1 ? 1 : ($page -1) * $config["per_page"] +1 )." to ".($page * $config["per_page"])." item of ".$config["total_rows"];


    $content_data["links"] = $this->pagination->create_links();
    $data['title'] = ' Status';                           //Browser page title
    $data['page_title'] = 'The Latest Status Updates';//The page H1 tag
    $data['content'] = $this->load->view('results', $content_data, TRUE);//the page content

    $this->load->view('home', $data);                  

}
4

1 に答える 1

0

まず、次の行を削除してから試してください

echo "Showing ".( $page == 1 ? 1 : ($page -1) * $config["per_page"] +1 )." to ".($page * $config["per_page"])." item of ".$config["total_rows"];

そしてあなたのページをチェックしてください。ページがエラーなしでレンダリングされ、ページネーションが正常に機能している場合は、フェッチされた行をカウントして範囲を計算し、計算された範囲をビューに渡す必要があります。

 $count = count($statuses);
 $r_from = $page <= 1 ? 1 : ($page -1) * $config["per_page"]+1; //RANGE STARTS FROM 
 $r_to   = $r_from + $count - 1;    //RANGE ENDS TO
 $content_data["range"] = $count? "Showing ".$r_from." to ".$r_to." item of ".$config["total_rows"]:'';

$content_data["links"]; を印刷しているように、ビューで印刷します。のようなものかもしれません

echo $range;

完全なコントローラーコード-

class Home extends CI_Controller {

function __construct()
{
    parent::__construct();
    $this->load->library("pagination");
}

public function index()
{
    $this->load->model('status_model');//load the status model

    //pagination config
    $config = array();
    $config["base_url"] = site_url() . "/home/index";
    $config["total_rows"] = $this->status_model->count_active_entries();//Get the total number of rows
    $config["per_page"] = 1;
    $config["uri_segment"] = 3;
    $config["anchor_class"] = 'class="normal" ';
    $config['full_tag_open'] = '<ul>';
    $config['full_tag_close'] = '</ul>';
    $config['first_tag_open'] = '<li>';
    $config['first_tag_close'] = '</li>';
    $config['next_link'] = 'Next';
    $config['next_tag_open'] = '<li>';
    $config['next_tag_close'] = '</li>';
    $config['last_tag_open'] = '<li>';
    $config['last_tag_close'] = '</li>';
    $config['prev_link'] = 'Prev';
    $config['prev_tag_open'] = '<li>';
    $config['prev_tag_close'] = '</li>';
    $config['cur_tag_open'] = '<li class="num_active">';
    $config['cur_tag_close'] = '</li>';
    $config['num_tag_open'] = '<li>';
    $config['num_tag_close'] = '</li>';


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

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

    $statuses = $this->status_model->get_entries($config["per_page"], $page); //call the method to get all the active statuses
    $count = '';
    if($statuses !== false) { 

        $content_data['results'] = $statuses;
        $count = count($statuses);
        $r_from = $page <= 1 ? 1 : ($page -1) * $config["per_page"]+1;
        $r_to   = $r_from + $count - 1;
        // YOU CAN DO IT WITHOUT COUNT. FOR THAT YOU NEED TO CALCULATE $r_to 
        // $r_to = $page * $config["per_page"];
        // AND NEED TO CHECK THIS WITH Total record
        // $r_to = $r_to>$config["total_rows"] ? $config["total_rows"]:$r_to;
    }
    else { // If no results are returned display the following error message

        $content_data['error'] = 'Error no status updates are being returned from the database. Please contact an administrator.';
    }


    $content_data["range"] = $count? "Showing ".$r_from." to ".$r_to." item of ".$config["total_rows"]:'';

    $content_data["links"] = $this->pagination->create_links();
    $data['title'] = ' Status';                           //Browser page title
    $data['page_title'] = 'The Latest Status Updates';//The page H1 tag
    $data['content'] = $this->load->view('results', $content_data, TRUE);//the page content

    $this->load->view('home', $data);                  

}
于 2013-07-24T05:21:27.173 に答える