- 第一种方式
写一个模板类template.php,在里面实现这种逻辑,再提供一个showView()方法。头尾有各自的模型
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class Template { private $mCI; private $mHeaderView='header.php';//头部文件 private $mFooterView='footer.php';//尾部文件 private $mTemplateView='template.php';//模板框架 public function __construct() { $this->mCI = &get_instance(); } public function showView($rContent_data) { //$rContent_data 在控制器中实现内容逻辑与视图 $data=array( $header_data=$this->getHeader(), $footer_data=$this->getFooter(), $content_data=$rContent_data ); $this->mCI->load->view($this->mTemplateView,$data); } private function getHeader() { $h=new HeaderModel();//实现头部逻辑, $data=$h->getData(); return $this->mCI->load->view($this->mHeaderView,$data,true); } private function getFooter() { $f=new FooterModel();//实现尾部逻辑, $data=$f->getData(); return $this->mCI->load->view($this->mFooterView,$data,true); } } ?>
转载自http://codeigniter.org.cn/forums/forum.php?mod=viewthread&tid=10753&page=1#pid50451
- 第二种方式
通过获得模板变化部分的全部数据返回给模板。
一般在网站的开发过程中,都会有个 template 或是叫 layout 的,它包含了整个网站的外观和布局,一般分为header,content,footer 有的甚至还包括 menu。其中的 content 部分则会随着不同的页面和功能而变化。这样就可以保证网站风格的一致性,也可以减少不少工作量。虽然便捷的 Codeigniter没有提供内置的处理方式,但是我们还是自己扩展的。
首先,把下面的代码保存到 application/libraries/Layout.php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class Layout { var $obj; var $layout; function Layout($layout = "layout_main") { $this->obj =& get_instance(); $this->layout = $layout; } function setLayout($layout) { $this->layout = $layout; } function view($view, $data=null, $return=false) { $data['content_for_layout'] = $this->obj->load->view($view,$data,true); if($return) { $output = $this->obj->load->view($this->layout,$data, true); return $output; } else { $this->obj->load->view($this->layout,$data, false); } } } ?>