我正在尝试创建一个构建和显示导航菜单的功能,同时尽可能地保持MVC(尽管我是新手,所以我完全不了解它。)
我的脚本在没有提供错误消息的情况下死亡。我们来调查吧!
在我看来,我调用了一个构建菜单内容的函数,并发送菜单中应该存在的页面的名称:
// application/views/templates/header.php
<ul class="navigation">
<?php
// Send in the English name, which also becomes the slug.
// Function should return the name in the appropriate language,
// plus the slug in English.
$args = ['home','compete','gallery','finalists','about'];
build_navigation($args);
?>
</ul>
现在的想法是循环遍历这些参数,并为包含文件名的每个参数构建一个列表项 - 这也是URL slug - 以及相应语言的显示名称。
// application/helpers/navigation_helper.php
// This is loaded in autoload.php — confirmed working
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
if ( ! function_exists('build_navigation')) {
function build_navigation($args) {
foreach ($args as $token)
echo "<li><a href=\"{$token}\">{$this->lang->line($token)}</a></li>\n";
}
}
?>
当我看到它时,它在我的头脑中是有道理的,但同时提出了诸如“在给定的上下文中$this
是什么的问题?”
如果我将 $this->lang->line($token)
更改为$token
,则脚本运行(尽管我没有获得我的多语言功能)。
我有我需要的语言文件......
// application/language/english/en_lang.php
<?php
$lang['home'] = "Home";
$lang['compete'] = "Compete";
$lang['gallery'] = "Gallery";
$lang['finalists'] = "Finalists";
$lang['about'] = "About";
?>
// application/language/swedish/sv_lang.php
<?php
$lang['home'] = "Hem";
$lang['compete'] = "Tävla";
$lang['gallery'] = "Galleri";
$lang['finalists'] = "Finalister";
$lang['about'] = "Info";
?>
...在这里你可以看到我正在我的控制器中加载我的语言文件(它几乎完全反映了CI文档中的页面控制器):
<?php
/**
* Pages
*
* Class for building static pages.
*
*/
class Pages extends CI_Controller {
public function view ($page = 'home') {
if (!file_exists('application/views/pages/'.$page.'.php'))
show_404();
$data['title'] = ucfirst($page); // Capitalise first letter of title
$this->lang->load('en','english');
$this->lang->load('sv','swedish');
$this->load->view('templates/header', $data);
$this->load->view('pages/'.$page, $data);
$this->load->view('templates/footer', $data);
}
}
?>
答案 0 :(得分:1)
在build_navigation($args)
试
$ ci =&amp; get_instance();
而不是$this->
使用$ci->lang
Als0,
$this->lang->load('filename', 'language');
其中filename是您要加载的文件的名称(没有文件扩展名),而language是包含它的语言集(即英语)。如果缺少第二个参数,将使用application / config / config.php文件中设置的默认语言。
您只需要加载所需的语言而不是两者。