Advanced Layout Library - bcit-ci/CodeIgniter GitHub Wiki
Example Usage:
class Page extends MY_Controller {
    function index(){
        $this->layout->build('page/index', array(
            'var1' => 'value1',
            'var2' => 'value2'
        ));
    }
}
class MY_Controller extends CI_Controller {
    function __construct(){
        parent::__construct();
        $this->load_layout();
    }
    function load_layout(){
        $this->load->library('layout');
        /* Prepend & Append Views (optional) */
        $this->layout->prepend('header');
        $this->layout->append('footer');
        /* Set Global Data (optional) */
        $this->layout->set(array(
            'global_var1' => 'value1',
            'global_var2' => 'value2'
        ));
        /* Add Callback for Formatting Layout (optional) */
        function format_html($html){
            return str_replace('<b>', '<strong>', $html); 
        }
        $this->layout->set_callback('format_html');
    }
}
/* End of file MY_Controller.php */
/* Location: ./application/core/MY_Controller.php */Library File: ./application/libraries/layout.php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Layout {
 
 var $append_views = array();
 var $callback = '';
 var $data = array();
 var $prepend_views = array();
 
 function __construct(){
  
  $this->ci =& get_instance();
  
 }
 
 function append($view, $data = null){
 
  if (!empty($view)){
   
   $this->append_views[] = $view; 
   $this->set($data); 
   
  }
  
 }
 
 function build($view, $data = null, $no_append = false){
  
  $html = '';
  
  if (!empty($view)){
   
   $this->set($data); 
   
   if (!$no_append){
    
    if (count($this->prepend_views)){
     
     foreach ($this->prepend_views as $prepend_view){
      
      $html .= $this->ci->load->view($prepend_view, $this->data, true); 
      
     }
     
    }
    
   }
   
   $html .= $this->ci->load->view($view, $this->data, true);
   
   if (!$no_append){
    
    if (count($this->append_views)){
     
     foreach ($this->append_views as $append_view){
      
      $html .= $this->ci->load->view($append_view, $this->data, true); 
      
     }
     
    }
    
   }
   
   if (!empty($this->callback)){
    
    $html = call_user_func($this->callback, $html); 
    
   }
   
  }
  
  echo $html;
  
 }
 
 function get(){
  
  return $this->data;
  
 }
 
 function prepend($view, $data = null){
  
  if (!empty($view)){
   
   $this->prepend_views[] = $view; 
   $this->set($data); 
   
  }
  
  
 }
 
 function set($data){
  
  if (is_array($data)){
   
   $this->data = array_merge($this->data, $data); 
   
  }
  
 }
 
 function set_callback($callback){
  
  if (is_callable($callback)){
   
   $this->callback = $callback;
   
  }
  
 }
 
}
/* End of file layout.php */
/* Location: ./application/libraries/layout.php */