CodeIgniter - Как мне сделать нумерацию страниц? - PullRequest
0 голосов
/ 06 сентября 2018

Я просмотрел много вопросов о разбиении на страницы, но не могу понять, как работает разбиение на страницы.
Мне нужно, чтобы Pagination работал на index(), и когда пользователь вводит диапазон дат searchdate().

В моем контроллере:

public function __construct() {
  parent::__construct();
  $this->load->model('ReportModel');
}

public function index()
{
   $orders=new ReportModel;
   $data['data']=$orders->get_orders();
   $this->load->view('includes/header');
   $this->load->view('Report/view',$data);
   $this->load->view('includes/footer');
}

public function searchDate()
{
   $orders=new ReportModel;
   $searchfrom = $this->input->post('searchDateFrom');
   $searchto = $this->input->post('searchDateTo');
   $data['data']=$orders->get_orders($searchfrom,$searchto);

   $this->load->view('includes/header');
   $this->load->view('Report/view',$data);
   $this->load->view('includes/footer');
}


В моей модели:

 public function get_orders(){
    $searchDateFrom = $this->input->post("searchDateFrom");
    $searchDateTo = $this->input->post("searchDateTo");
    $this->db->select('platform,id,no,date,printed_date');
    $this->db->from('orders');

    if(!empty($searchDateFrom) || !empty($searchDateTo) || !empty($searchPlatform)){
        if (!empty($searchDateFrom)) {
            $this->db->where('date >= ', $this->input->post("searchDateFrom"));
        }
        if (!empty($searchDateTo)) {
            $this->db->where('date <= ', $this->input->post("searchDateTo")." 23:59:59");
        }          
    }

    $this->db->order_by("date", "desc");
    $this->db->limit(300);

    $query = $this->db->get();

    return $query->result();
 }


На мой взгляд:

<div class="pull-right">
        <form class="form-inline" role="search" action="<?php echo base_url('estoreReport/searchDate')?>" method = "post">
            <div class="form-group">
              <input type="date" class="form-control" placeholder="Order Date From" name = "searchDateFrom" ">
              <input type="date" class="form-control" placeholder="Order Date To" name = "searchDateTo" ">                    
            </div>
            <button class="btn btn-default " type="submit" value = "searchDateTo"><i class="glyphicon glyphicon-search"></i>
        </form>
      </div>
</div>

<div class="table-responsive">
<table class="table table-bordered">
  <thead>
      <tr>
          <th>Platform</th>
          <th>ID</th>
          <th>No</th>
          <th>Date</th>
          <th>Printed Date</th>
      </tr>
  </thead>
  <tbody>
   <?php foreach ($data as $d) { ?>
      <tr>
      <td ><?php echo $d->platform; ?></td>
      <td><?php echo $d->id; ?></td>
      <td><?php echo $d->no; ?></td>
      <td><?php echo $d->date; ?></td>
      <td><?php echo $d->printed_date; ?></td>
      <td></td>
      <td></td>
      </tr>
      <?php } ?>
  </tbody>
</table>
</div>

Я прочитал документацию CodeIgniter и знаю, что я должен поместить конфигурации в контроллер.

 public function pagination($count){
     $this->load->library('pagination');

     $config['base_url'] = base_url('/order/Report/');
     $config['total_rows'] = $count;
     $config['per_page'] = 100;
     $config["uri_segment"] = 3;
     $choice = $config["total_rows"] / $config["per_page"];
     $config["num_links"] = ;
     $config['use_page_numbers'] = TRUE;
     $config['reuse_query_string'] = TRUE;
     $page = ($this->uri->segment($config["uri_segment"] )) ? $this->uri->segment($config["uri_segment"] ) : 0;

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

     $pagination = $this->pagination->create_links();

     return array($page, $config['per_page'], $pagination);
 }

Но я все еще не уверен, как изменить другие части моего контроллера, модели и вида. Я новый ученик CodeIgniter, это только моя тестовая страница, помогите, пожалуйста.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Проверьте это:

кодовая нумерация страниц

кодовая нумерация страниц 2

Я дал ответы на вопрос о нумерации страниц в Codeigniter на StackOverflow. Эти ссылки имеют полное описание. Надеюсь, это поможет

0 голосов
/ 06 сентября 2018

Ваш контроллер должен выглядеть так:

public function __construct() {
  parent::__construct();
  $this->load->model('ReportModel', 'orders');
  $this->load->library('pagination');
}

public function index($offset = 0)
{
    $data['data']=$this->orders->get_orders($search = array(), $offset);
    $config['total_rows'] = $data['total_rows'] = $this->orders->get_orders($search = array(), $offset, true);
    $config['base_url'] = base_url('/order/index/');
    $config['per_page'] = 100;
    $config["uri_segment"] = 3;
    $config['reuse_query_string'] = TRUE;
    $this->pagination->initialize($config);

    $data['pagination'] = $this->pagination->create_links();

   $this->load->view('includes/header');
   $this->load->view('Report/view',$data);
   $this->load->view('includes/footer');
}

Затем ваша модель должна быть изменена, чтобы иметь возможность разбивать ваши результаты на страницы:

public function get_orders($search = array(), $offset = 0, $count = false){
    $searchDateFrom = $search["searchDateFrom"];
    $searchDateTo = $search["searchDateTo"];
    $this->db->select('platform,id,no,date,printed_date');
    $this->db->from('orders');

    if(!empty($searchDateFrom) || !empty($searchDateTo) || !empty($searchPlatform)){
        if (!empty($searchDateFrom)) {
            $this->db->where('date >= ', $this->input->post("searchDateFrom"));
        }
        if (!empty($searchDateTo)) {
            $this->db->where('date <= ', $this->input->post("searchDateTo")." 23:59:59");
        }          
    }

    $this->db->order_by("date", "desc");
    if ( !$count ) {
        $this->db->limit(100, $offset);
        $query = $this->db->get();
        return $query->result();
    }
    $query = $this->db->get();
    return $query->num_rows();

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...