CodeIgniter - 第2コントローラを使用してビューをビューにネストする方法

だから私は私のビューにこの部分があります:

 <body>
    <div id = "content">
       <?php echo $catalog ?>
    </div>
 </body>

そこには他の変数もあります。ここでは私のコントローラーのどこに私がビューにそれらを送る部分があります:

$this->load->view('layout',array(
        'categories'    =>  $categories,
        'home_menu'     =>  $home_menu,
        'information'   =>  $information,
        'favourite'     =>  $favourite,
        'new_products'  =>  $new_products,
        'bestsellers'   =>  $bestsellers,
        'login_info'    =>  $login_info,
        'catalog'       =>  ''
        ));

2番目のコントローラを作成して、アクティブにすると変数 $ catalog に2番目のビューを送信します。

このようなもの(コハナに似ています):

$this->layout->catalog = $this->load->view('products/catalog', array(
                'name'          =>  $name,
                'description'   =>  $description));

しかし、それは動作していません。

私の質問は、どのように2番目のコントローラをアクティブにするリンクをクリックした後、この2番目のネストされたビューを表示できますか?


編集:

しかし、ユーザーが次のような2番目のコントローラをアクティブにするリンクをクリックした後にカタログビュー$カタログ変数に送信したいとします。

 $products = $this->Product_model->list_products($category_id);
foreach ($products as $row)
        {
                     $name = $row->name;
                     $description = $row->description;
        }

..その後、 $ name$ description を渡す必要があります。

$this->load->view('products/catalog', array(
                    'name'          =>  $name,
                    'description'   =>  $description));

..それ自身が、最初のコントローラで定義されたレイアウトビューの $ catalog に渡されます

0

2 答え

You can call a $this->load->view within the view's code but I would not recommend it.

代わりに、ロードビュー関数の3番目のパラメータとして true を渡します。これはまっすぐにエコーするのではなく、ビューを返します。次に、返されたコードを元のビューに割り当てることができます。

3
追加された
ありがとうございますが、私は第2のコントローラを使ってビューを送信したいと思います。私は私のポストに詳細を追加しました。
追加された 著者 Ziik,

私はあなたの質問を完全に理解したいと思っていますが、そうでなければ謝ります。

私の推測では、ページに「エキストラ」のすべてを読み込んでいて、ユーザーが開始したクリックを通じてページの「コンテンツ」部分を更新できるようにしたいと考えています。

javascriptベースのソリューションを実装している場合、htmlフラグメントを出力し、それをajax呼び出しによって現在のページに挿入するコントローラが必要です。

javascriptを実装していない場合は、ページ全体がリフレッシュされるため、ページを再構築して、選択したカタログコンテンツをコントローラに渡すだけです。

更新

これをajaxやhmvcなしで行うには、別のコントローラからこのコントローラに内容を取得する必要があります。

$catalog_content = file_get_contents('/url_to_second_controller.html');
$this->load->view('layout',array(
    'categories'    =>  $categories,
    'home_menu'     =>  $home_menu,
    'information'   =>  $information,
    'favourite'     =>  $favourite,
    'new_products'  =>  $new_products,
    'bestsellers'   =>  $bestsellers,
    'login_info'    =>  $login_info,
    'catalog'       =>  $catalog_content
    ));
0
追加された
まあ、もちろんありますが、コントローラと構造によって異なります。 HMVC を使用している場合は、それらのコントローラを呼び出すことができますコントローラ内から。もしあなたがこれをたくさんしたら、私はそれをお勧めします。しかし、これを簡単にするために、私は2番目のコントローラへの file_get_contents()呼び出しを行い、それをビューに配置します。私の答えの更新を参照してください。
追加された 著者 swatkins,
私はajaxなしでそれを作りたいので、ページのリフレッシュは問題ではありません。したがって、コードを小さくする方法はありません(2番目のコントローラは $ に値を与えるだけです)。 $ content を含むすべての変数( $$ home_menu$情報 b>レイアウトビューを読み込みますか?
追加された 著者 Ziik,
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com