1

对于我的 Codeigniter 站点,我首先为每个控制器情况创建一个视图。这是不切实际的,因为它需要返回每个代码来进行更改。所以我改变了方法并在带有可选字段的“默认”控制器上进行操作。然后我想我可以根据需要将特殊视图加载到其中。

我将这个视图与可选字段放在一起,其中字段为$title$search_bar开/关等。但是,现在出现了内容区域。我能够使用以下方法将更多视图加载到此默认视图中:

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

(而且效果很好)两个问题:

  1. 我让事情变得复杂吗?这是一种公认​​的方式吗?还是我误解了视图的功能以及它们的工作原理?

  2. 我想要一种方法来混合$content_view即一段文本,然后是一个视图。我不太确定如何进行。假设我想要一条消息,然后是视图,然后是更多文本。此方法将只接受视图。

任何人都可以帮助我创建这种灵活的方法吗?

4

1 回答 1

1

是的,我会说你让事情变得有点复杂。虽然我可能没有完全按照您的描述准确地知道如何回应,但我可以告诉您我是如何做到的:

首先,整个站点通过模板运行,因此页眉和页脚是容器文件,站点内所需的所有视图都呈现为页面类型视图 - 如文章页面、图库页面等。组件被加载并传递给以字符串形式查看:

$content['sidebar'] = $this->load->view('components/sidebar', $data, true);

最后一个 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; ?>

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

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

于 2012-12-10T20:01:29.873 回答