所以我在视图中有这个部分:
<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
答案 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
));