Skip to content

Advanced Layout Library

World Wide Web Server edited this page Jul 4, 2012 · 5 revisions

Example Usage: [code] 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 */ [/code]

Location: ./application/libraries/layout.php [code] <?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 */ [/code]

Clone this wiki locally