kawais 发表于 2011-9-20 11:43:45

CodeIgniter的模板布局库layout library

本帖最后由 kawais 于 2011-9-20 13:56 编辑

总感觉CI自带的模板类用起来有点不方便,看了些网上其他的类似功能的库,都满足不了我的要求,最主要的模板嵌套很繁琐,于是自己动手写了个。
支持模块嵌套
支持Parse
支持指定layout和单个模块的文件及变量

http://blog.lyphp.com/wp-content/uploads/2011/09/Screenshot11.png




http://blog.lyphp.com/wp-content/uploads/2011/09/Screenshot-1.png

使用说明
在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指定!

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

dde333 发表于 2011-9-20 13:04:49

感谢分享!

loveinlove 发表于 2011-9-20 16:56:37

1.7时好像有人分享过类似layout方法,但楼主的可控更自由

as3291363 发表于 2011-9-21 11:09:06

很不錯的思路啊...

好雨时节 发表于 2013-9-6 12:56:59

画蛇添足

kawais 发表于 2013-9-12 18:24:58

好雨时节 发表于 2013-9-6 12:56 static/image/common/back.gif
画蛇添足

请教如何有更简单的方法?
页: [1]
查看完整版本: CodeIgniter的模板布局库layout library