CodeIgniter 视图使用两种模板Template布局的方式

  • 第一种方式

写一个模板类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); 
        } 
    } 
} 
?>

转载自http://codeigniter.org.cn/forums/thread-1176-1-1.html

原文地址:https://www.cnblogs.com/mackxu/p/CodeIgniter.html