Php 使用Codeigniter的复合视图?
对于我的Codeigniter站点,我首先为每个控制器情况创建一个视图。这是不切实际的,因为这需要返回到代码中进行更改。所以我改变了方法,在带有可选字段的“默认”控制器上操作。然后我想我可以根据需要在其中加载特殊视图 我将此视图与可选字段组合在一起,这些字段用于Php 使用Codeigniter的复合视图?,php,codeigniter,Php,Codeigniter,对于我的Codeigniter站点,我首先为每个控制器情况创建一个视图。这是不切实际的,因为这需要返回到代码中进行更改。所以我改变了方法,在带有可选字段的“默认”控制器上操作。然后我想我可以根据需要在其中加载特殊视图 我将此视图与可选字段组合在一起,这些字段用于$title,$search\u bar打开/关闭等。但是,现在出现了内容区域。我可以使用以下方法将更多视图加载到此默认视图中: $data['content_views'][]='blocks/login';
$title
,$search\u 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);
}
}
(这很好用)
两个问题:
$content\u视图的方法,即先是一块文本,然后是一个视图。我不太清楚该如何进行。先说我想要一条消息,然后是一个视图,然后是更多的文本。此方法将只接受视图
有人能帮我创建这种灵活的方法吗?是的,我想说你让事情变得有点复杂了。虽然我可能没有很好地理解您的描述,无法准确地知道如何回应,但我可以告诉您我是如何做到的: 首先,整个网站通过模板运行,因此页眉和页脚是容器文件,网站内需要的所有视图都呈现为页面类型视图,如文章页面、图库页面等。组件以字符串形式加载并传递给视图:
$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; ?>
并且,假设您为每个视图填充这些数组,它将呈现页眉、内容和页脚。如果有侧边栏,也可以渲染侧边栏
因此,结合所有内容,我基本上是说,您可以在控制器中逐步加载分区,将子视图作为字符串传递给任何有意义的分区。这样,视图就可以在它所属的控制器中控制,而不是在视图文件本身中控制。根据我的经验,我从来没有写过一个如此复杂的网站,如果网站规划得好的话,这个结构就不太合适。是的,我想说你让事情变得有点复杂。虽然我可能没有很好地理解您的描述,无法准确地知道如何回应,但我可以告诉您我是如何做到的: 首先,整个网站通过模板运行,因此页眉和页脚是容器文件,网站内需要的所有视图都呈现为页面类型视图,如文章页面、图库页面等。组件以字符串形式加载并传递给视图:
$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; ?>
并且,假设您为每个视图填充这些数组,它将呈现页眉、内容和页脚。如果有侧边栏,也可以渲染侧边栏
因此,结合所有内容,我基本上是说,您可以在控制器中逐步加载分区,将子视图作为字符串传递给任何有意义的分区。这样,视图就可以在它所属的控制器中控制,而不是在视图文件本身中控制。根据我的经验,我没有写过一个如此复杂的网站,如果网站规划得好,这个结构就不完全合适。谢谢!你说得对,我把事情弄得比我应该做的复杂得多。我现在有了一个清晰的想法我应该怎么做…:D如果我需要在一个字段中附加多于一个区域,我可以使用您的第一行,并使用
=
为我需要的每一项添加:)如果您想要附加,即使是串联也可能过多。我会将任何添加作为它们自己的变量传递。不过话说回来,你可能有理由按照你说的去做。谢谢!你说得对,我把事情弄得比我应该做的复杂得多。我现在有了一个清晰的想法我应该怎么做…:D如果我需要在一个字段中附加多于一个区域,我可以使用您的第一行,并使用=
为我需要的每一项添加:)如果您想要附加,即使是串联也可能过多。我会将任何添加作为它们自己的变量传递。但话说回来,你可能有理由按照你说的去做。