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

[库 Library] CI的layout的进一步改进

[复制链接]
发表于 2010-2-25 11:18:49 | 显示全部楼层 |阅读模式
昨天看了 kissmumu同学的《改进layout library,方便自定义layout》很不错的说,赞一个先....但是在使用的时候发现了一些小小的不方便,所以在kissmumu同学的基础再一次作了些小的调整^-^

首先,假定一个新闻页来说他的layout页面看起来应该像这样:
<html>

<body>


<h1>Herder</h1>


<hr/>




<?php echo $layout_body ?>




<hr/>


<h1>Foote</h1>

</body>

<html>


但事实上作为一个新闻页它还需要关键字,描述信息等,所以最终的layout页面看起来应该像这样:

<html>

<head>

  <meta http-equiv="content-type" content="text/html; charset=UTF-8" />

  <title><?php echo $layout_title ?></title>

  <meta name="keywords" content="<?php echo $layout_keywords ?>" />

  <meta name="description" content="<?php echo $layout_description ?>" />

</head>


<body>


<h1>Herder</h1>


<hr/>




<?php echo $layout_body ?>




<hr/>


<h1>Foote</h1>

</body>


</html>


meta信息每个页面是不相同的,所以需要从Controller中传入,故修改Layout.php为:

<?php

if (!defined('BASEPATH')) exit('No direct script access allowed');


class Layout {


var $obj;


/** 默认layout页名称 */

  
var $layout = "main";

  
var $layout_data;


  
function Layout($params = array()) {

  
$this->obj =& get_instance();

   
if (count($params) > 0) {

   
$this->init($params);

  
}

  
// 为了方便layout页的管理,所以在views文件夹下建了个layouts文件夹

  
$this->layout = "layouts/" . $this->layout;


}



  
function init($params = array()) {


if (count($params) > 0) {   

   
foreach ($params as $key => $val) {

      
$this->$key = $val;

      
}        

   
}


}



/**


* 渲染页面


* @param $view
string 主体视图名称


* @param $data
array() 主体视图所需数据数组


* @param $is_return boolean 是否返回渲染页面的字符串表现形式


* @return string/void


*/

  
function view($view, $data = null,$is_return = false) {

  
$this->layout_data['layout_body'] = $this->obj->load->view($view, $data, true);


  
if($is_return) {

   
$output = $this->obj->load->view($this->layout, $this->layout_data, true);

      
return $output;

   
}

   
else {

   
$this->obj->load->view($this->layout, $this->layout_data, false);

   
}


}


}


?>




在Controller中调用的代码如下:

// 内容页所需的数据

$data = array(


"message"=>"Hello World"

);


// layout页所需的数据

$layout_data = array(


"layout_title"=>"My title",


"layout_keywords"=>"My keywords",


"layout_description"=>"My description"

);


// 调用layout->view() 之前将layout_data传入

$this->layout->layout_data = $layout_data;


$this->layout->view("test", $data);






评分

参与人数 1威望 +5 收起 理由
Hex + 5 精品文章

查看全部评分

本版积分规则