繁体   English   中英

与Codeigniter的复合视图?

[英]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);
        }
    }

(效果很好)两个问题:

  1. 我要把事情变得复杂吗? 这是接受的方式吗? 还是我误解了视图的功能以及它们是如何工作的?

  2. 我想要一种混合 $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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM