[英]Composite views with Codeigniter?
对于我的Codeigniter站点,我首先查看每种控制器的情况。 这是不切实际的,因为这将需要返回到每个代码进行更改。 因此,我更改了方法,并在带有可选字段的“默认”控制器上进行了操作。 然后我以为可以根据需要加载特殊视图。
我将这个视图与可选字段(包括$title
, $search_bar
on / off等)合并在一起。但是,现在出现了内容区域。 我能够使用以下命令将更多视图加载到该默认视图中:
$data['content_views'][]='blocks/login';
$this->load->view('default/a', $data);
并在“默认”视图中:
if(isset($content_views)&& (is_array($content_views)))
{
foreach($content_views as $content_view)
{
$this->load->view(&$content_view);
}
}
(效果很好)两个问题:
我要把事情变得复杂吗? 这是接受的方式吗? 还是我误解了视图的功能以及它们是如何工作的?
我想要一种混合 $content_view
,即一块文本,然后是一个视图。 我不确定如何进行。 说我先要消息,然后是视图,然后是更多文本。 此方法将仅接受视图。
有人可以帮助我创建这种灵活的方法吗?
是的,我会说您使事情变得有些复杂。 尽管我可能对您的描述不够了解,无法确切地知道如何做出响应,但我可以告诉您我该如何做:
首先,整个网站都是通过模板运行的,因此页眉和页脚是容器文件,并且网站中所需的所有视图都以页面类型视图的形式呈现-例如文章页面,画廊页面等。将组件加载并传递给视图作为字符串:
$content['sidebar'] = $this->load->view('components/sidebar', $data, true);
最后一个真实的说法是渲染为字符串。
从本质上讲,这意味着页面视图几乎都是html,而php却回显了必要的元素。 没有视图调用其他视图,这就是我阅读您的示例的方式。
CI会逐步加载视图,因此您的控制器可以这样输出:
$this->load->view('header', $header_data);
$view_data['sidebar'] = $this->load->view('components/sidebar', $sidebar_data, true);
$this->load->view('content', $view_data);
$this->load->view('footer', $footer_data);
在内容视图中,像这样处理侧边栏:
<?php if(isset($sidebar)): ?>
<nav>
<?php echo $sidebar; ?>
</nav>
<?php endif; ?>
并且,假设您为每个视图填充这些数组,它将呈现页眉,内容,页脚。 并渲染边栏(如果存在)。
因此,结合所有内容,我基本上是说您可以逐步加载控制器中的部分,将子视图作为字符串传递给有意义的任何部分。 这样,您就可以在自己所属的控制器中而不是在视图文件本身中控制视图。 以我的经验,我不必编写一个如此复杂的站点,以至于如果该站点计划得当,这种结构就不是十分合适。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.