2012-01-27 70 views
0

我想知道CodeIgniter是否允許頁碼之後的分段,以及最好的方法是做什麼?在CodeIgniter的頁碼之後有分段

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

我需要我的傳呼也通過這個:

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

我已經因爲段數跑進多個問題,因爲我使用$this->uri->uri_to_assoc(n)我會需要...

我需要能夠傳遞值到每個頁面,在這一點上我不知道該怎麼做。

您是否認爲最好的方法是始終將分頁移動到所有其他分段的末尾?看來這也會導致問題。

+0

我相信你是錯的Jakub;請參考文檔http://codeigniter.com/user_guide/libraries/pagination.html(第一個例子) – jason 2012-01-27 14:43:18

+0

我認爲*您提到了'config.php',它也有'$ config ['base_url']' 。在這種情況下,您使用了分頁特定的配置,我將刪除我的評論。 – Jakub 2012-01-27 14:58:13

+0

如果base_url爲空,那麼頁碼只顯示在URL中沒有別的... – jason 2012-01-27 14:58:46

回答

2

賈森,你自己只是因爲你鬆散地跟蹤了哪些區塊是控制器/方法的一部分,以及哪些是你認爲相關的區段。

我會首先告訴大家堅持一個方法說給其追加到結束(這是從URI,而不是你的路由配置用戶的角度來看):

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

上面的格式會在後端表示如下: /view/是控制器,page是您在控制器中的方法,那麼您將使用$this->uri->uri_to_assoc(4)(第4個元素,名稱即可啓動)。

這樣你就可以正確地捕捉到你的頁碼1233,然後把所有相關的數據給它。

作爲一個建議,我會提醒注意不要使用不可讀的變量,這會導致混淆,並且不會使您的網站網址搜索引擎友好(誰知道最終是什麼/ 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'); 

IF

它是未知的多少段你有(比如動態$ uri_segments數組),使用$this->uri->total_segments()來計算總分段數,然後你的分頁數就是那個(最後一個)的+1。

+0

好吧,我有點迷路;你必須現在的頁碼?以及當最後一個值必須是頁碼時,我如何將剩餘的數據附加到base_url ... – jason 2012-01-27 14:57:36

+0

我已更新我的答案,對不起,路由問題總是引起混淆。 – Jakub 2012-01-27 15:10:42

+0

感謝您的澄清,這使得現在更有意義... – jason 2012-01-27 16:00:42

0

是的,可以做到。

做它是在分頁配置數組的方式, 'uri_segment' 應該是可變:

$配置[ '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();