0

我想知道 CodeIgniter 是否允许在页码之后使用分段,最好的方法是什么?

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

我也需要我的分页来通过这个:

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

我遇到了多个问题,因为我正在使用$this->uri->uri_to_assoc(n)因为我需要的段数......

我需要能够将值传递给每个页面,此时我不知道该怎么做。

您认为最好的方法是始终将分页移动到所有其他段的末尾吗?似乎这也会导致问题。

4

2 回答 2

2

Jason,您自己制造问题仅仅是因为您忘记了哪些段是控制器/方法的一部分,哪些是您认为相关的段。

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

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

上面的格式在后端意味着这样的东西: /view/是控制器,page是你在控制器中的方法,然后你将使用$this->uri->uri_to_assoc(4)(第 4 个元素,作为开始的名称)。

这样您就可以正确捕获页码1233,然后捕获所有相关数据。

作为一个建议,我会警告不要使用不可读的变量,它会导致混乱并且不会使您的网站 url SEO 友好(谁知道 /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');

如果

不知道你有多少段(比如一个动态的 $uri_segments 数组),$this->uri->total_segments()用来计算总段,然后你的分页是那个(最后一个)的+1。

于 2012-01-27T14:19:54.673 回答
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();
于 2013-01-10T18:34:19.797 回答