kissmumu 发表于 2009-3-18 23:20:37

改进layout library,方便自定义layout

本帖最后由 kissmumu 于 2009-3-18 23:25 编辑

CodeIgniter使用 layout library 简化视图布局 中,有些小的缺陷,不能在controller中加载类的同时设定自己的layout。貌似在CI1.6.1时可以的,方式:$this->load->library(’layout’,'template’);自定义的layout就是template。但是现在CI1.7.0+,loader不一样了。
library($library,$paramsAarry,$objName),有三个参数了。第一个必须的是要加载的library,后面的分别是配置数组和自定义对象名称。
所以,$this->load->library(’layout’,'template’)就不适用了。于是淡水就把layout library改写了一下。

<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Layout
{
    var $obj;
    var $layout;
    function Layout($params = array())
    {
   $this->obj =& get_instance();
   if (count($params) > 0)
{
   $this->initialize($params);
}
else
{
   $this->layout = 'layout_main';
}
    }
    function initialize($params = array())
    {
      if (count($params) > 0)
      {   
            foreach ($params as $key => $val)
            {
                $this->$key = $val;
            }      
      }
    }
    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);
      }
    }

}
?>

新的调用方式:

function
Contact()
{ [*]
parent :: Controller();[*]
# layout不是默认的layout_main.php 了,是newtemplate.php了[*]
$config = array('layout' => 'newtemplate');[*]
$this->load->library('layout',$config);[*]
}[*][*]
function
index()
{[*]
$data["page_title"] = "联系我们";[*]
$this->layout->view('contact', $data);[*]
}
如果想自定义对象名可以这样:
function
Contact()
{ [*]
parent :: Controller();[*]
$config = array('layout' => 'newtemplate');[*]
$this->load->library('Layout',$config,'mytemp');[*]
}[*][*]
function
index()
{[*]
$data["page_title"] = "联系我们";[*]
# 下面就是使用自定义的对象名 mytemp[*]
$this->mytemp->view('contact', $data);[*]
}
Tagged CodeIgniter, layout

abotoo 发表于 2009-3-27 22:05:59

谢谢了,已经换成你修改后的了,呵呵

richardw 发表于 2012-4-4 22:44:52

$this->mytemp->view('contact', $data);
这里的'contact'是个视图吗?为什么不显示呢,只显示了newtemplate的内容....
页: [1]
查看完整版本: 改进layout library,方便自定义layout