0

可能な限り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);

    }
}

?>
4

1 に答える 1

1

あなたのbuild_navigation($args)

試す

$ci = &get_instance();

$this->使用する代わりに$ci->lang

Als0、

$this->lang->load('filename', 'language');

filename はロードするファイルの名前 (ファイル拡張子なし) で、language はそれを含む言語セット (つまり、英語) です。2 番目のパラメーターが欠落している場合、application/config/config.php ファイルで設定されているデフォルトの言語が使用されます。

両方ではなく、必要な言語のみをロードする必要があります。

于 2012-08-30T08:43:07.817 に答える