对于我的Codeigniter网站,我首先查看了每个控制器的情况。这是不切实际的,因为它需要返回每个代码来进行更改。所以我改变了方法并使用可选字段在“默认”控制器上操作。然后我想我可以根据需要加载特殊视图。
我将此视图与可选字段放在一起,其中包含$title
,$search_bar
开/关等字段。但是,现在来了内容区域。我可以使用以下方法将更多视图加载到此默认视图中:
$data['content_views'][]='blocks/login';
$this->load->view('default/a', $data);
并在'default'view中:
if(isset($content_views)&& (is_array($content_views)))
{
foreach($content_views as $content_view)
{
$this->load->view(&$content_view);
}
}
(这很好) 两个问题:
我是在做复杂的事情吗?这是一种可接受的方式吗?或者我误解了视图的功能以及它们的工作方式?
我想要一种混合 $content_view
的方法,即一个文本块,然后一个视图。我不太清楚如何继续。假设我首先想要一条消息,然后是一个视图,然后是更多文本。此方法仅接受视图。
有人可以帮我创建灵活的方法吗?
答案 0 :(得分:1)
首先,整个站点通过模板运行,因此页眉和页脚是容器文件,站点内所需的所有视图都呈现为页面类型视图 - 如文章页面,图库页面等。组件已加载,以字符串形式传递给视图:
$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; ?>
并且,假设您为每个视图填充这些数组,它将呈现标题,然后是内容,然后是页脚。如果它存在,也会渲染侧边栏。
所以结合一切,我基本上说你可以逐步加载你的控制器中的部分,将子视图作为字符串传递给任何有意义的部分。这可以使您的视图控制在它所属的控制器中,而不是视图文件本身。根据我的经验,我没有必要编写一个如此复杂的网站,如果该网站规划得当,这个结构并不完全合适。