2013-05-21 55 views
0

我使用this approach來本地化我的codeigniter網絡應用程序。 現在一切正常,但我想刪除這個重複的代碼,本地化我不得不把裏面所有的控制器動作以下codeigniter中的本地化,不同語言的不同視圖

public function history() 
    {    
     $selectedLang = $this->lang->lang(); 
     switch ($selectedLang) 
     { 
      case "en": 
       $data['switchLang'] = "fr"; 
       $langView = "company/historyEN"; 
       break; 
      case "sr": 
       $data['switchLang'] = "en";         
       $langView = "company/history"; 
       break; 
      default: 
       $data['switchLang'] = "en";      
       $langView = "company/history"; 
     }   

     $this->lang->load("content"); 
     $this->load->view($langView, $data); 
    } 

是否有可能移動這裏面是CI_Controller類,這將是適用於所有控制器比?如果是的話如何?

還是別的什麼,請告訴我到正確的方向

回答

1

或者你可以做的就是把這個功能您的模型和自動加載該模型...所以它可以在你所有的控制器中使用。你只需要調用這個在所有控制器中只有一行的mehhod。

好您可以從配置Go..Make(一個)模型和自動加載它/ autoload.php 然後把你的這段代碼進去....說你的型號名稱是語言

<?php 
class Language extends CI_Model { 
public function history() 
    {    
     $selectedLang = $this->lang->lang(); 
     switch ($selectedLang) 
     { 
      case "en": 
       $data['switchLang'] = "fr"; 
       $langView = "company/historyEN"; 
       break; 
      case "sr": 
       $data['switchLang'] = "en";         
       $langView = "company/history"; 
       break; 
      default: 
       $data['switchLang'] = "en";      
       $langView = "company/history"; 
     }   

     $this->lang->load("content"); 
     $this->load->view($langView, $data); 
    } 
} 

現在從你的每一個控制器

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

class controllername extends CI_Controller { 
    public function __construct() 
    { 
     parent::__construct(); 
     $this->language->history(); 
    } 

+0

請包括內部模型,功能代碼,並從控制器調用來接受你的答案。謝謝 – panjo

+0

編輯我的答案..檢查並告訴我是否有任何混淆 –

1

正確的做法是,讓自己的核心控制器,並把這個功能在該類中。而且你讓所有的控制器都來自這個類。你將能夠在你的控制器中使用這個功能。

但我認爲最好的方法是製作自己的模板庫並自動加載,而不是使用CI視圖使用自己的模板庫。

像這樣的事情

<?php 

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

class Template { 

    var $CI; 

    public function __construct() { 
     $this->CI = &get_instance(); 
    } 

    function view($view = '', $data = array()) { 

     $selectedLang = $this->CI->lang->lang(); 

     switch ($selectedLang) { 
      case "en": 
       $data['switchLang'] = "fr"; 
       $langView = $view . "EN"; 
       break; 
      case "sr": 
       $data['switchLang'] = "en"; 
       $langView = $view; 
       break; 
      default: 
       $data['switchLang'] = "en"; 
       $langView = $view; 
     } 

     $this->CI->lang->load("content"); 

     return $this->CI->load->view($langView, $data); 
    } 

} 

/* End of file template.php */ 
/* Location: ./system/application/libraries/template.php */ 

並在控制器,你只需要使用此行來獲取視圖

$this->template->view('company/history', $data)