2011-11-29 66 views
1

假設我想在codeigniter項目中列出產品並支持多種語言,以便有人選擇英文並獲得url爲example.com/products/5,其中5是頁碼,並且別人會選擇意大利語並去example.com/prodotti/5。在幕後,我想要一個控制器來傳遞語言參數和頁碼參數來處理這些請求。我有一些這樣的情況,我正在考慮創建兩個名爲products和prodotti的控制器,然後通過爲每個控制器提供它需要的參數來調用第三個控制器。Codeigniter多種語言的網址,但由同一控制器處理

有沒有更好的方法?這可以通過路線實現嗎?

回答

0

這裏是我是如何解決它:

的application/config/routes.php文件

$route['products/(.*)'] = 'products/en/$1'; 
$route['prodotti/(.*)'] = 'products/it/$1'; 

應用/控制器/ products.php

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Products extends CI_Controller { 

    public function index($lang, $nr) 
    { 
     echo 'lang: ', $lang, ' nr: ',$nr; 
    } 

    // https://gist.github.com/1096571 
    function _remap($method) 
    { 
     $param_offset = 2; 

     if (! method_exists($this, $method)) 
     { 
      $param_offset = 1; 
      $method = 'index'; 
     } 

     $params = array_slice($this->uri->rsegment_array(), $param_offset); 

     call_user_func_array(array($this, $method), $params); 
    } 
}