用户
 找回密码
 入住 CI 中国社区
搜索
查看: 7050|回复: 2
收起左侧

[库 Library] 改进layout library,方便自定义layout

[复制链接]
发表于 2009-3-18 23:20:37 | 显示全部楼层 |阅读模式
本帖最后由 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

评分

参与人数 1威望 +5 收起 理由
Hex + 5 原创内容

查看全部评分

发表于 2009-3-27 22:05:59 | 显示全部楼层
谢谢了,已经换成你修改后的了,呵呵
发表于 2012-4-4 22:44:52 | 显示全部楼层
PHP复制代码
$this->mytemp->view('contact', $data);
复制代码

这里的'contact'是个视图吗?为什么不显示呢,只显示了newtemplate的内容....

本版积分规则