2011-10-10 68 views
0

我具有例如控制器:分頁與笨,沒有指數函數

class Users extends CI_Controller 
{ 
    function index() 
    { 
     $this->load->library('pagination'); 

     $config['base_url'] = base_url() . 'index.php/users'; 
     $config['total_rows'] = 55; 
     $config['per_page'] = 10; 
     $this->pagination->initialize($config); 

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

然後分頁將是:

base_url() . 'index.php/users/10 
base_url() . 'index.php/users/20 
base_url() . 'index.php/users/30 
.. 

技術問題

它顯示的鏈接細,但當我點擊它顯示404. 它工作正常,只有當鏈接將是這樣的(與函數索引):

base_url() . 'index.php/users/index/10 
base_url() . 'index.php/users/index/20 
base_url() . 'index.php/users/index/30 
.. 

反正,我不希望用戶將看到index地址,我該怎麼辦? 我想取消索引地址+分頁將無法使用它。

回答

2

指數已經在那裏,否則笨將不知道調用哪個函數(在你的控制器中的「指數()」函數)。

最好的辦法是使用URI路由。

添加像這樣(未經):

$route['users/page/:num'] = "users/index"; 

到文件「的application/config/routes.php文件」

但是分頁庫還可以添加索引在這種情況下,你需要擴展它或創建自己的。但是,使用以下基本url可能工作:

class Users extends CI_Controller 
{ 
    function index() 
    { 
     $this->load->library('pagination'); 

     $config['base_url'] = base_url() . 'index.php/users/page/'; 
     $config['total_rows'] = 55; 
     $config['per_page'] = 10; 
     $this->pagination->initialize($config); 

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

再次,這是未經測試。很抱歉的未經測試的例子,但是你一定會需要URI路由做你所需要的,有關於URI路由here

爲了處理與舊的URI任何搜索引擎優化的問題,您可以嘗試任何進一步的信息以下。

要每次用戶點擊您不希望顯示的uri格式時,都可以通過將它放在用戶控制器的index()函數的頂部,將它們重定向到正確的版本。

$this->load->helper('url'); 
$current_uri = uri_string(); 
if(strpos($current_uri, 'users/index')) 
{ 
    $new_uri = str_replace('users/index','users',$current_uri); 
    redirect($new_uri); 
} 

或者你可以設置一個規範的meta標籤在HTML,這告訴雖然網頁它看起來它在規範的標籤,沒有地址欄應被視爲在網頁搜索引擎的蜘蛛。尋找更多的規範標籤here

<link rel="canonical" href="<?php echo site_url('users/'.$page_num); ?>" /> 

當然,你將不得不調整變量作爲必要以上。

你也可以通過htaccess來完成,但沒有辦法測試它,只是此刻我厭倦了試圖給出任何例子。

+0

謝謝。我之前嘗試過,它的工作原理,但通過索引輸入的選項仍然存在。另外,頁碼1的鏈接是'base_url()。 'index.php/users /',我怎樣才能最終取消斜線?我認爲重定向將有助於解決這些問題。但是,如何? (如果通過框架有一個選項,而不是通過.htaccess,這將是很好的)。 – Luis

+0

我猜你不希望其他網址爲seo目的工作,我會更新我的答案,因爲它比嘗試在評論中編寫代碼更乾淨,因爲它更乾淨:) – robjbrain

+0

答案更新:) – robjbrain

0

也許你可以嘗試重寫.htaccess中的網址?

我不記得確切的語法,但...

1

試試這個:

$route['users'] = "users/index"; 
$route['users/([0-9]+)] = "users/index/$1";