CodeIgniter - 如何使用第二个控制器在视图中嵌套视图

时间:2011-10-27 15:46:07

标签: php codeigniter

所以我在视图中有这个部分:

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

其中还有其他变量。以下是我将Controller发送到View的部分:

$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发送第二个视图。

像这样的东西(类似于Kohana):

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

但它不起作用。

我的问题是,如何在点击激活第二个控制器的链接后显示第二个嵌套视图?


编辑:

但我希望在用户点击激活第二个控制器的链接后将目录视图发送到 $ catalog 变量,如下所示:

 $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

2 个答案:

答案 0 :(得分:3)

您可以在视图的代码中调用$this->load->view,但我不会推荐它。

而是将true作为加载视图函数中的第3个参数传递,这将返回视图而不是直接回显。然后,您可以将返回的代码分配给原始视图。

答案 1 :(得分:0)

我希望我完全理解你的问题,但如果没有,我道歉。

我的猜测是,您正在加载包含所有“附加内容”的页面,并希望能够通过用户启动的点击更新页面的“内容”部分。

如果您正在实施基于javascript的解决方案,那么您只需要一个控制器来输出html片段并通过ajax调用将其注入当前页面。

如果您没有实现javascript,那么它将是整个页面刷新,因此您只需重建页面并将选定的目录内容传递给控制器​​。

<强>更新

要在没有ajax或hmvc的情况下执行此操作,您需要将另一个控制器中的内容放入此控制器中,因此您可以使用php发出额外请求:

$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
    ));