0

我正在使用这种方法来本地化我的 codeigniter Web 应用程序。现在一切正常,除了我想删除这个重复的代码,为了本地化,我必须在每个控制器操作中放入以下

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 类中?如果是这样怎么办?

或者别的什么,请告诉我正确的方向

4

2 回答 2

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)
于 2013-05-21T10:56:38.617 回答
1

或者你可以做的是把这个函数放在你的模型中并自动加载那个模型......所以它可以在你的所有控制器中使用......你只需要调用这个方法,它只是所有控制器中的一行。

好的,你走吧..制作一个模型并从 config/autoload.php 自动加载它然后将你的这段代码放入其中......说你的模型名称是language

<?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();
    }

于 2013-05-21T11:02:55.370 回答