可能な限り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
与えられた文脈には何があるか」というような疑問が生じます。</p>
$this->lang->line($token)
justに変更$token
すると、スクリプトが実行されます(ただし、多言語機能は利用できません)。
必要な言語ファイルがあります…</p>
// 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);
}
}
?>