Наличие сегментов после номера страницы в CodeIgniter - PullRequest
0 голосов
/ 27 января 2012

Мне интересно, разрешает ли CodeIgniter сегменты после номера страницы и как это лучше всего сделать?

$config['base_url'] = '/controller/view/pg/';

Мне нужно, чтобы мой пейджинг также прошел это:

/controller/view/pg/1/v/l/rpp/20 ... и т. Д.

Я столкнулся с несколькими проблемами, потому чтоЯ использую $this->uri->uri_to_assoc(n) из-за количества сегментов, которые мне понадобятся ...

Мне нужно иметь возможность передавать значения на каждую страницу, и на данный момент я не уверен, как это сделать,

Как вы думаете, лучший способ сделать это - всегда перемещать пейджинг в конец всех остальных сегментов?Похоже, это также приводит к проблемам.

Ответы [ 2 ]

2 голосов
/ 27 января 2012

Джейсон, вы сами решаете проблему просто потому, что теряете, какие сегменты являются частью контроллера / метода, и какие сегменты вы считаете релевантными.

Прежде всего, я бы сказал вам придерживаться одного метода, скажем, добавить его в конец (это с точки зрения пользователей в URI, а не в конфигурации вашего маршрута):

/view/page/1233/name/blue-skies/pg/20

Приведенный выше формат будет означать что-то вроде этого на сервере: /view/ - это контроллер, page - ваш метод в контроллере, тогда вы должны использовать $this->uri->uri_to_assoc(4) (4-й элемент, имя для запуска).

Таким образом, вы правильно фиксируете номер своей страницы 1233 и затем все соответствующие данные для него.

В качестве предложения я бы предостерег от использования нечитаемых переменных, это приводит к путанице и НЕ делает ваш сайт оптимизированным для URL (кто знает, что в итоге означает / v / p / 123 / v / l / 20?) .

Всегда используйте ваш $this->output->profiler(TRUE);, если у вас проблемы с маршрутизацией URI. Не связывайтесь с вашей конфигурацией маршрута, если вам НЕ ДЕЙСТВИТЕЛЬНО это нужно, это может привести к путанице, которая усложнит ваше тестирование.

РЕДАКТИРОВАТЬ

Я создал путаницу, потому что, основываясь на вашем вопросе, вы можете интерпретировать его как проблему маршрутизации с позиции файла config.php ИЛИ класса пагинации. Я взял это с первого подхода.

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

Вы можете решить эту проблему, сделав номер страницы последним элементом вашего URI

Последний: /view/page/1233/name/blue-skies/user/12/20

Где 20 - это номер страницы, сгенерированный пагинацией, остальные - сегменты, которые вы используете для чего угодно.

В этом случае вы установите $config['uri_segment'] = 6;, а $config['base_url'] = '/view/page/1233/'.$this->uri->assoc_to_uri($uri_segments);

.

Где:

$uri_segments = array(
 'name' => 'blue-skies',
 'user' => '12');

IF

Неизвестно, сколько у вас сегментов (скажем, динамический массив $ uri_segments), используйте $this->uri->total_segments() для подсчета общего количества сегментов, тогда ваш пагинация равна +1 к этому (последнему).

0 голосов
/ 10 января 2013

Да, это можно сделать.

Способ сделать это в массиве конфигурации разбивки на страницы, uri_segment должен быть переменным:

$ config ['uri_segment'] = $ сегмент_смещение;

$ сегмент_смещение можно рассчитать, выполнив поиск '/ pg /' (из вашего примера) в URI.

Пример кода:

  //for pagination      
  $start = 0;
  $limit_per_page = 100;


    //URI to acoc array:
    $uri_array = $this->uri->uri_to_assoc(4);
    /*
     Array
        (
            [page_links] => 0
        )
     */

    //Take the number of pagination segment from uri; return URI number by its name 
    $segment_offset  = 0;

    foreach($uri_array as $key=>$value){
      $segment_offset++;
      if('page_links' == $key){
          //segment founded
          break;
      }
    }

    //calculate actual place or pagination number
    //$segment_offset = $segment_offset + uri_to_assoc(**4**) + **1** place after the segmwnt 'page_links' is actual number for pagination;
    $segment_offset = $segment_offset + 4 + 1;


  //DB query can be here

  // ///////////////////////////////////////////////////////////////////////
  // NOTE: Set up the paging links. Just remove this if you don't need it,
  // NOTE: ...but you must remember to change the views too.
  // ///////////////////////////////////////////////////////////////////////
  $this->load->library('pagination');
  $this->load->helper('url');


  $config['base_url']     = site_url('controller1/browse/pg/'.$pg.'/other_segment/etc..');
  $config['total_rows']   = xxx;
  $config['per_page']     = $limit_per_page;

  //$config['uri_segment'] = xx;
  //now that can be variable, and not just on the end of the URI 
  $config['uri_segment'] = $segment_offset;


  $config['first_url'] = '0';

  $config['num_links'] = 4;

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

  $the_results['page_links'] = $this->pagination->create_links();
...