0

私はこのトピックについて非常に多くの研究をしましたが、どうすればこれを行うことができるかわかりません。$data別のビューのコントローラーから呼び出されているビューのパラメーターにデータを追加しようとしています。subviewただし、経由で追加したデータには、subcontrollerがアクセスできませんsubview。ただし、クライアントビューを介してサブビューにデータを渡そうとすると、問題なく機能します。SOの修正のほとんどは、$ dataではなく呼び出しを参照しているように$key in $data['key']見えるため、ここではあまり関係がないようです...

私には2つのクラスがあります:

  • welcome.php-ページ
  • welcomemenu.php-welcome.phpにロードすることを目的とした一連のコントロール

これが私のクライアントコントローラー(それが置かれているページwelcome.php)で、サブビューからの戻り値を$welcomemenu独自の$ data配列に格納します...:

<?php

class Welcome extends CI_Controller {

    function __construct() {
        parent::__construct();      
    }

    function index() {
        //echo 'this is the Welcome index function';
        $data['clienttestdata'] = 'data from welcome.php!';
        $data['welcomemenu'] = $this->load->view('welcome/welcomemenu', $data, true);

        $this->load->helper('url');
        $this->load->view('templates/header');
        $this->load->view('pages/welcome', $data);
        $this->load->view('templates/footer');

    }
}

そして、これがクライアントビューです( "welcome_view.php"-十分に単純なようです。$welcomemenu変数は、コンポーネントクラスからのリターンを置く場所です...):

    <section id="allWelcomeContent" class="mainBody">
        <header id="mainPageHdr" class=mainPageHdr>
            <!-- other stuff from my header -->
        </header>
        <!-- this is where i want to put the welcome menu... -->
        <section id="mainWelcomeContent" class="mainContent">
            <div>
                <?php echo $welcomemenu;?>
            </div>
        </section>
    </section>

そして、これが私のサブコンポーネントのコントローラーですwelcomemenu.php

<?php

class Welcomemenu extends CI_Controller {

    public function __construct() {
        parent::__construct();
    }

    public function index() {
        $data['menu_items'] = array('About', 'Portfolio', 'Resume', 'Fun', 'Blog'); 
        $data['testdata'] = 'data from welcomemenu.php!';

        $this->load->view('welcome/welcomemenu', $data);
    }
}

そして最後に:これは、独自のコントローラーからデータを取得することになっているサブビューですが、呼び出し元のクライアントからデータを取得できる場合でもできません(つまり、$ clienttestdataは正常に表示されますが、$ testdataは表示されません)。

<section>
<!-- TODO:  make this element repeatable so content can load from controller and/or model. -->
<div id="divMenuItems">
    <?php echo $clienttestdata;?>
    <?php echo $testdata;?>
</div>
</section>

それでも私は適切な解決策を見つけることができませんでした。誰かが私にください

4

1 に答える 1

1

Welcome / indexメソッドにwelcomemenu部分を含める場合、ビューはそれ自体のコントローラーを経由しないことに注意する必要があります。代わりに、その内容は文字列として返され、パラメータとして保存されます。それはあなたがそれを介してそれに送るものを通してそれ自身のすべてのパラメータを取得します$data

$data['welcomemenu'] = $this->load->view('welcome/welcomemenu', $data, true);

したがって、このビューはこれまでのすべてにアクセスできます$data。Welcomemenuコントローラーを介して追加されるものはありません。したがって、上記の場合、次のようになります。

array
(
   'clienttestdata' => 'data from welcome.php!'
)

必要なパラメータを$data(として$data['testdata'])追加すると、サブビューに必要なものが含まれます。

于 2013-02-17T11:15:50.673 に答える