Codeigniter的复合视图?

时间:2012-12-10 19:38:29

标签: php codeigniter

对于我的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);
        }
    }

(这很好) 两个问题:

  1. 我是在做复杂的事情吗?这是一种可接受的方式吗?或者我误解了视图的功能以及它们的工作方式?

  2. 我想要一种混合 $content_view的方法,即一个文本块,然后一个视图。我不太清楚如何继续。假设我首先想要一条消息,然后是一个视图,然后是更多文本。此方法仅接受视图。

  3. 有人可以帮我创建灵活的方法吗?

1 个答案:

答案 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; ?>

并且,假设您为每个视图填充这些数组,它将呈现标题,然后是内容,然后是页脚。如果它存在,也会渲染侧边栏。

所以结合一切,我基本上说你可以逐步加载你的控制器中的部分,将子视图作为字符串传递给任何有意义的部分。这可以使您的视图控制在它所属的控制器中,而不是视图文件本身。根据我的经验,我没有必要编写一个如此复杂的网站,如果该网站规划得当,这个结构并不完全合适。