CI的layout的进一步改进
昨天看了 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]