Php 代码点火器-视图不违反DRY的最佳实践
试图确定在codeigniter中处理视图的最佳方法。现在我认为任何东西都太乱了。< /P> 目前我有3个相关观点: 1) 标题 2) 内容 3) 页脚 每个控制器都有类似的功能。某些控制器甚至多次执行此操作(同一控制器中的不同功能): 在每一页上都要加载页眉和页脚,这似乎很愚蠢。但是,每个页面的标题中的数据略有不同(元标记、样式表、加载的脚本等) 有没有更干净的方法让我这么做Php 代码点火器-视图不违反DRY的最佳实践,php,codeigniter,codeigniter-2,dry,Php,Codeigniter,Codeigniter 2,Dry,试图确定在codeigniter中处理视图的最佳方法。现在我认为任何东西都太乱了。< /P> 目前我有3个相关观点: 1) 标题 2) 内容 3) 页脚 每个控制器都有类似的功能。某些控制器甚至多次执行此操作(同一控制器中的不同功能): 在每一页上都要加载页眉和页脚,这似乎很愚蠢。但是,每个页面的标题中的数据略有不同(元标记、样式表、加载的脚本等) 有没有更干净的方法让我这么做 谢谢 是-有一个模板视图。在控制器中: $this->load->view('head', $data);
谢谢 是-有一个模板视图。在控制器中:
$this->load->view('head', $data);
$this->load->view('volunteers/add_profile.php',$content_data);
$this->load->view('foot');
$data['header'] = xxx;
$data['content'] = xxx;
$this->load->view('my_template', $data);
然后在my_template.php视图文件中:
$this->load->view('head', $header);
$this->load->view('volunteers/add_profile.php',$content);
$this->load->view('foot');
@TheShift Exchange建议的,或者,如果您的应用程序允许,您可以从每个内容视图调用页眉和页脚视图(这是从控制器调用的唯一视图) 我喜欢使用类似于
renderPage('content\u view',$data)
的方法创建父控制器。该方法可以包括页眉、菜单、页脚等。。。这样,所有视图加载的内容都保存在控制器中,我不必为每个动作或视图的页眉、菜单或页脚而烦恼。它也很灵活,因为您的子控制器可以重新定义renderPage()
方法以满足其用途
如果需要加载多个内容视图,可以创建一个renderPage()
方法,该方法接受字符串数组而不是字符串。请检查
因此,您可以始终使用模板库。但我不喜欢他们,因为某些原因
codeigniter允许您扩展其核心;如果你去上面提到的链接,你可以看到一个小例子
在本例中,每个扩展MY_控制器的控制器都将从这些defauls开始
protected $body='base/body',
$title='Codeigniter Z master',//txt
$js=array(),//filename
$inline_js='',//script
$css=array(),
$inline_css='',//style
$breadcrumb=FALSE,//<li><a>
$content=array(),//html
$noEcho = FALSE;
如果要将视图加载到页面节中,请使用$this->outv(视图路径、视图数据、节名称)代码>
如果您只想将html加载到变量中,您可以使用
$this->out('Footer','Footer')
最后只需调用->_flush()
我还使用了其他一些选项,比如
$noEcho
;如果设置,则在将视图内容发送到浏览器之前,将清除所有缓冲区以删除任何回音
您还可以在MY_控制器内设置注销或登录等功能,任何ur控制器都可以访问该功能http://localhost/ci/welcome/logout
无论如何:)我希望这能回答你的问题 我已经创建了自己的控制器,在这里我创建了我的\u控制器扩展了CI\u控制器
类,然后在我的\u控制器
中,我使用访问修饰符$data
和加载视图数组
public $data = array();
public $loadviewArray = array();
在此之后,我在我的\u控制器中创建函数
public function loadview() {
foreach ($this->loadviewArray as $key => $val) {
$this->load->view($val, $this->data);
}
}
然后我在Admin
中创建控制器并扩展我的\u控制器
如下管理员在Admin
控制器创建函数索引中扩展我的\u控制器
public function index() {
$this->data["page_title"] = "Login";
$this->data["records"] = $data; // You can pass data
$this->loadviewArray = array("admin/header", "admin/login", "admin/footer");
$this->loadview();
}
在$data
访问修改器数组中,我在视图中传递数据,然后在$loadviewArray
加载视图中调用加载视图的函数。您可以这样做,现在这对我非常有帮助。并分别创建页眉和页脚视图…如何将$header数据从控件获取到my_template.php视图文件?您不能使用$this->加载内部视图文件@是的,你可以。我一直在做,看看我的答案(用户2727841),它会给你一个想法!!!检查@user2727841的答案…是否有理由拒绝投票?这同样有效,如果你想在里面加载另一个视图,比如admin/login,你可以使用$data['extra']=$this->load->view('view',$data,True)!或者说是什么;;
public function index() {
$this->data["page_title"] = "Login";
$this->data["records"] = $data; // You can pass data
$this->loadviewArray = array("admin/header", "admin/login", "admin/footer");
$this->loadview();
}