CodeIgniter 中页码后面有段

问题描述 投票:0回答:2

我想知道 CodeIgniter 是否允许页码后面的段以及执行此操作的最佳方法是什么?

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

我也需要我的寻呼来传递这个:

/controller/view/pg/1/v/l/rpp/20
...等等

我遇到了多个问题,因为我使用

$this->uri->uri_to_assoc(n)
,因为我需要的段数......

我需要能够将值传递到每个页面,目前我不知道该怎么做。

您认为执行此操作的最佳方法是否始终将分页移至所有其他段的末尾? 看来这也会带来问题。

php codeigniter pagination page-numbering
2个回答
2
投票

Jason,你自己制造这个问题只是因为你不知道哪些部分是控制器/方法的一部分,以及哪些部分是你认为相关的。

我首先会告诉你坚持一种方法,即将其附加到末尾(这是从 uri 中的用户角度来看,而不是你的路由配置):

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

上述格式在后端的含义如下:

/view/
是控制器,
page
是控制器中的方法,那么您将使用
$this->uri->uri_to_assoc(4)
(第四个元素,是开始的名称)。

这样您就可以正确捕获页码

1233
以及所有相关数据。

作为建议,我会警告不要使用不可读的变量,它会导致混乱,并且不会使您的网站 url SEO 友好(谁知道 /v/p/123/v/l/20 最终意味着什么?)。

如果您在 uri 路由方面遇到问题,请始终使用您的

$this->output->profiler(TRUE);
。 除非确实需要,否则不要弄乱您的路由配置,这可能会导致混乱,从而使您的测试变得复杂。

编辑

我造成了混乱,因为根据您的问题,您可以将其解释为来自 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');

如果

未知您有多少个段(例如动态 $uri_segments 数组),使用

$this->uri->total_segments()
来计算总段数,然后您的分页就是该(最后一个)的+1。


0
投票

是的,可以做到。

方法是在分页配置数组中,'uri_segment'应该是变量:

$config['uri_segment'] = $segment_offset;

$segment_offset 可以通过在 URI 中查找“/pg/”(来自您的示例)来计算。

示例代码:

  //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();
© www.soinside.com 2019 - 2024. All rights reserved.