нумерация страниц с выбранными записями - PullRequest
0 голосов
/ 22 ноября 2011

Я новичок в работе с codeigniter.Надежда может помочь решить проблему с нумерацией страниц.

  1. Я выбрал несколько записей на мой взгляд и передал свой контроллер, используя $ _POST.
  2. контроллер будет использовать переменную $ _POST для выбора записей из модели.
  3. , тогда записи будут отображаться в том же виде с нумерацией страниц.

шаг 1-3 в порядке, информация о представлении отображается правильно.

  1. при нажатии на кнопку нумерации страниц с моей точки зрения.Это вызовет тот же контроллер, но информация $ _POST будет пустой.Таким образом, мое представление не отображается с выбранными записями по мере необходимости.

надежда может помочь.

Я упростил код следующим образом: -

контроллеры:

    $config['total_rows']=$this->invdata_model->getFilterData_numRows();

    $config['base_url']=site_url('site/users_area') ;
    $config['uri_segment'] = '3'; 
    $config['per_page']=18;
    $config['num_links']=4;

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

    $data['records']=$this->invdata_model->getFilterData_Rows($config['per_page'],$this->uri->segment(3));
    $data['rec_country']=$this->invdata_model->country();

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

модели:

    $country = $this->input->post('country') ;


    $this->db->select('stockno, bdlno, country,volton');
    if (isset($country)) { $this->db->where_in('country',$country); }
    $q=$this->db->get('inventory')->num_rows();

    return $q ; 

Вид

  <?php echo form_open('site/users_area');   
        echo $this->table->generate($records);   
        echo $this->pagination->create_links() ;    ?>

  <div class="gadget">
<?php echo form_submit('submit','Apply','class="button_form"'); ?>      
  </div>

  $gadget['gadget_name']='country'; 
  $gadget['gadget_rec']=$rec_country; 
  $this->load->view('gadget',$gadget);
  </form>

Просмотр гаджета

  <div class="gadget">
  <?php

  $gadget_name2=$gadget_name.'[]';

  echo "<ul>";
  foreach ($gadget_rec as $item) {
    echo '<li >';  
    echo '<div id="sectionname">'.$item.'</div>';
    echo '<div id="sectioninput"><input type="checkbox" name="'.$gadget_name2.'" value="'.$item.'"></div>' ;
    echo '-';
    echo "</li>";  
  }

  echo "<ul>";
   ?>
  </div>

Спасибо.

Ответы [ 3 ]

1 голос
/ 22 ноября 2011

Звучит как проблема подхода. Почему вы используете данные POST для фильтрации ваших данных? Библиотека разбивки на страницы строит строку запроса, чтобы определить смещение результатов запроса вашей базы данных. Почему вы не можете использовать $ _GET вместо $ _POST?

Полагаю, можно было бы настроить конфигурацию пагинации base_url на это:

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

$config['base_url'] = current_url().'?'.http_build_query($_POST);
$config['total_rows'] = 200;
$config['per_page'] = 20;

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

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

А затем в вашем контроллере используйте $ this-> input-> get_post (), а не $ this-> input-> post (). Будьте осторожны - редко можно передать полные данные непосредственно в модель для обработки. Было бы лучше использовать входной класс CI для предотвращения XSS-атак ...

UPDATE:

Чтобы использовать входной класс CI, а не $ _POST или $ _GET напрямую, я обычно храню свои данные формы в «пространстве имен», т.е.

<input type="text" name="search[criteria1]" />
<input type="text" name="search[criteria2]" />
<input type="text" name="search[criteria3]" />

Тогда в вашем контроллере:

...
public function some_resource()
{
    $this->load->model('Some_model');
    $search_criteria = $this->input->get_post('search');
    if ($search_criteria)
    {
        // make sure here to remove any unsupported criteria
        // (or in the model is usually a bit more modular, but
        // it depends on how strictly you follow MVC)
        $results = $this->Some_model->search($search_criteria);
    }
    else
    {
        // If no search criteria were given, return unfiltered results
        $results = $this->Some_model->get_all();
    }

    $this->load->view('some_view', array(
        'results'         => $results,
        'pagination_base' => current_url().'?'.http_build_query($search_criteria)
    ));
}
...

Поскольку я указал $ this-> input -> get_post (), он сначала проверит параметр строки запроса; если он не существует, он возвращается к публикации данных. Это позволит вам использовать POST в вашей форме, но все же передавать те же данные через строку запроса с классом нумерации страниц. Однако на самом деле форма должна использовать метод GET, так как вы отправляете эти параметры в виде запроса, а не для отправки чего-либо на сервер. Просто мои $ .02 на эту деталь.

0 голосов
/ 20 августа 2012

Я предлагаю вам отредактировать как:

$config['base_url']=site_url('site/users_area/arg1/arg2') ;

, а затем "$ _GET", это URL или JST использовать

$val1 = $this->uri->segment(3);
$val1 = $this->uri->segment(4);

, а также изменить свой uri_segment

$config['uri_segment'] = '3';to
$config['uri_segment'] = '5'.

Зависит от количества аргументов, проходящих через URL

0 голосов
/ 22 ноября 2011

Класс разбивки на страницы использует GET-запросы и просто изменяет URL-адрес со смещением записи страницы.Например, страница 2 для списка, отображающего 50 записей на странице, будет / some / url / 50, а страница 3 будет /some/url/100.

. Вы можете либо:

  1. Измените # 3 для работы с POST или GET и вызовите URL, который может определить, какие записи выбрать, или
  2. Расширьте класс нумерации страниц, чтобы вывести форму, которая повторно отправляет те же данные POST из # 2каждый раз, когда вы изменяете страницу (и каждая ссылка должна указывать POST a, а не просто быть ссылкой).

Я думаю, что # 1, вероятно, лучший вариант.Это SEF, его можно добавить в закладки, и в целом это более чистый способ сделать это.

Например, вы используете форму, как обычно, но вы также можете перейти непосредственно к результату, используя / some / unique/ url

Тогда каждая ссылка нумерации страниц будет вызывать / some / unique / url / 50, где 50 - это смещение записи (класс пагинации использует смещение, а не номер страницы).

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