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

[库 Library] CodeIgniter的模板布局库layout library

[复制链接]
发表于 2011-9-20 11:43:45 | 显示全部楼层 |阅读模式
本帖最后由 kawais 于 2011-9-20 13:56 编辑

总感觉CI自带的模板类用起来有点不方便,看了些网上其他的类似功能的库,都满足不了我的要求,最主要的模板嵌套很繁琐,于是自己动手写了个。

支持模块嵌套

支持Parse

支持指定layout和单个模块的文件及变量









使用说明

在views目录下建立每个controller对应的目录以及default目录,layout先在当前controller目录中查找文件,若没有则在default中查找,如还没有,则抛出异常。
文件内容
layout.php
<div id="container">
{header}

{content}

        {footer}
</div>

header.php
<h1>{subheader}<h1>


subheader.php
Welcome to CodeIgniter!<?php echo $hello; ?>

content.php
<div id="body"><code>application/controllers/welcome.php</code>{subcontent}</div>

subcontent.php
<p>If you are exploring CodeIgniter for the very first time.</p>

footer.php
<p>{subfooter}Page rendered in <strong>{elapsed_time}</strong> seconds</p>

sub.php
{thefooter}

常用方法

__construct($layout)构造函数,$layout为布局名称,默认为layout.php,
先在当前controller的目录中寻找,没有则到default中寻找


setSlot($path,$vars,$file)用于指定各个模块
$path为模块层级,如header/subheader表示header下的subheader
$vars为该模块中使用的变量
$file为该模块对应文件,如不指定则自动寻找与模块名相同的文件,如subheader.php

view($vars,$view,$return)用于显示布局
$vars为布局中使用的变量
$view未使用,留空
$return是否返回字符串,默认false,为true则返回字符串

其他
$parse是否使用Parse库,如不使用,模板中不能用{}表示变量,默认使用
$merge合并模板变量,如使用,在处理各子模块时会将setslot中的$vars,和view中的$vars合并使用,
这样setslot可不带vars参数,统一到view中指定,默认不使用
!每一个子模块都需要用setslot指定!

PHP复制代码
 
class Welcome extends CI_Controller {
 
  function __construct()
  {
          parent::__construct();
          $this->load->library('layout');
          $this->layout->setSlot('header');
          $this->layout->setSlot('header/subheader',array('hello'=>'This is a layout library'));
          $this->layout->setSlot('footer/subfooter',array(),'sub.php');
          $this->layout->setSlot('footer');
          $this->layout->setSlot('content/subcontent');
          $this->layout->setSlot('content');
  }
 
        public function index()
        {
          $this->layout->view(array('hello'=>'hello layout!','thefooter'=>'I am a FOOTER MAN!!'));
        }
}
 
复制代码



下载地址: http://blog.lyphp.com/archives/478

评分

参与人数 2威望 +12 收起 理由
lamtin + 6 很给力!
jeongee + 6 赞一个!

查看全部评分

发表于 2011-9-20 13:04:49 | 显示全部楼层
感谢分享!
发表于 2011-9-20 16:56:37 | 显示全部楼层
1.7时好像有人分享过类似layout方法,但楼主的可控更自由
发表于 2011-9-21 11:09:06 | 显示全部楼层
很不錯的思路啊...
发表于 2013-9-6 12:56:59 | 显示全部楼层
画蛇添足
 楼主| 发表于 2013-9-12 18:24:58 | 显示全部楼层
好雨时节 发表于 2013-9-6 12:56
画蛇添足

请教如何有更简单的方法?

本版积分规则