我想知道如何使用CodeIgniter在视图中打开视图。
我想到这个: 在每个控制器中,我将调用默认的index.php-view。在那里,我将添加一个占位符来打开该控制器的视图。
这是个主意吗?或者,最佳做法是为每个控制器创建不同的视图,并将视图包含在:$this->view('header');
?
我是CI,FYI的新人; - )
答案 0 :(得分:1)
这是迄今为止我发现的最简单灵活的方法。在您的视图文件夹中创建一个模板文件,该文件调用常用的元素,如标题,导航栏,页脚等。
模板具有用于传递特定内容的开放变量,例如,让我们创建模板:views / template_web.php 然后包含一些文件来创建基本页面结构 意见/ tmpl_web_head.php 意见/ tmpl_web_close.php 视图/ tmpl_web_foot.php
现在创建一个名为' web'的文件夹。对于具体内容 视图/网络/
带有一些特定的网络文件 意见/网络/ tmpl_web_head.php 意见/网络/ navbar.php 视图/网络/ navbar_bottom.php
所以这里是模板文件views / template_web.php
// generic header
$this->load->view('tmpl_web_head');
// folder with views specific for "web"
$templatefolder = 'web/';
// header and navbar specific to web
$this->load->view($templatefolder.'header_top');
$this->load->view($templatefolder.'navbar');
// content that is passed from the controller
if(isset($content01))
$this->load->view($templatefolder.$content01);
if(isset($content02))
$this->load->view($templatefolder.$content02);
if(isset($content03))
$this->load->view($templatefolder.$content03);
if(isset($content04))
$this->load->view($templatefolder.$content04);
if(isset($content05))
$this->load->view($templatefolder.$content05);
if(isset($content06))
$this->load->view($templatefolder.$content06);
$this->load->view($templatefolder.'navbar_bottom');
$this->load->view('tmpl_web_close');
$this->load->view('tmpl_web_foot');
一旦设置了这个模板,它就很容易传递内容
控制器中的
function doSomethingWonderful(){
// whatever is happening in the controller
$data['results'] = $this->model->doSomething ;
// the views you want shown on the page
$data['content01'] = 'results_view';
$data['content02'] = 'search_form';
$data['content03'] = 'latest_news';
// just one view call, the content is passed automatically
$this->load->view( 'template_web', $data );
}
这方面有很多很棒但是当你制作不同版本的网站时,它真的很棒。您可以创建一个不同的模板,比如说web_beta并将这些文件放在web_beta文件夹中
然后在你的控制器中,除了你在视图调用中调用beta模板之外,一切都保持不变。
$this->load->view( 'template_web_beta', $data );
这样可以非常快速地更新网站,进行更改等。