Я пытаюсь создать функцию, которая строит и отображает меню навигации, сохраняя при этом 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-адресом, и отображаемое имя на соответствующем языке.
// 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); } } ?>
В вашем build_navigation($args)
пытаться
$ ci = & get_instance ();
и вместо $this->
используйте $ci->lang
Als0,
$this->lang->load('filename', 'language');
Где filename – это имя файла, который вы хотите загрузить (без расширения файла), а язык – это набор языков, содержащий его (например, английский). Если второй параметр отсутствует, будет использоваться язык по умолчанию, указанный в вашем файле application / config / config.php.
Вам нужно всего лишь загрузить требуемый язык не для обоих.