【问题标题】:CodeIgniter behaviour, constructors and routesCodeIgniter 行为、构造函数和路由
【发布时间】:2015-10-28 15:24:27
【问题描述】:

我第一次使用 CodeIgniter 2.0 创建一个主页包含幻灯片的多语言站点。我正在我的笔记本电脑上开发它 - localhost/website/。

我正在使用 routes.php 文件来指定调用哪个语言函数来设置变量,具体取决于格式为 http://localhost/website/language/page_id/some-page-title 的 url。因此http://localhost/website/en/1/Home-Page 给出了page_id 1 的英文页面。

Routes 文件因此具有:

$route['default_controller'] = "content";
$route['en/(:num)/(:any)'] = "content/en/$1";
$route['de/(:num)/(:any)'] = "content/de/$1";
$route['es/(:num)/(:any)'] = "content/es/$1";
etc

内容控制器中的语言函数(en 函数)的示例是:

public function en ($page_id) {
        $language="en";
        $lang_array['css']="base.css";
        $this->get_content($page_id, $lang_array);
}

然后 get_content 函数会做所有事情。

内容控制器的索引函数看起来像这样:

public function index() {
            //setting defaults for when arrive straight at home page or with no language in url
            $page_id=1;
            $lang_array['language']="en";
            $lang_array['css']="base.css";
            $this->get_content($page_id, $language);
        }

我的问题是,当我转到 http;//localhost/website/ 时,一切正常,包括幻灯片。但是,当我转到 url http://localhost/website/en/1/Home-Page 时,一切正常,除了幻灯片中的图片不出现(即使它们都执行相同的代码并且当我查看页面上的视图源时,html 输出是相同的)。

我唯一能想到的事实是,如果我只输入http;//localhost/website/,那么将调用激活构造函数的索引函数,但如果我输入http://localhost/website/en/1/Home-Page,则绕过索引和构造函数。但是不知道为什么其他事情仍然有效,但图片幻灯片却没有。这是你认为的原因吗?有什么解决办法吗?

谢谢

汤姆

【问题讨论】:

  • 真正吓到我的是两个 url(简单的根 url 和带有语言组件的 url)的输出代码完全相同。图像等的链接完全相同,并且还使用 base_url() 来解决路径问题。如此迷茫。两段相同的html如何显示不同的结果?

标签: php codeigniter


【解决方案1】:

我能想到的是未定义变量上的某种 JavaScript 错误,可能与未设置 $lang_array['language'] 有关。

在索引中,您将键设置为默认为'en',

public function index() {
        //setting defaults for when arrive straight at home page or with no language in url
        $page_id=1;
        $lang_array['language']="en";
        $lang_array['css']="base.css";
        $this->get_content($page_id, $language);
    }

但在 zh 方法中,您没有

public function en ($page_id) {
    $language="en";
    $lang_array['css']="base.css";
    $this->get_content($page_id, $lang_array);

}

由于它们看起来几乎相同,您应该将相同的行为抽象为私有函数,或者修改路由以将语言作为参数发送到单个函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    相关资源
    最近更新 更多