1.修改Loader链式加载header和footer方式

参考:http://stackoverflow.com/questions/9540576/header-and-footer-in-codeigniter/

<?php

/**
* /application/core/MY_Loader.php
*
*/
class MY_Loader extends CI_Loader {
public function template($template_name, $vars = array(), $return = FALSE)
{
$content = $this->view('templates/header', $vars, $return);
$content .= $this->view($template_name, $vars, $return);
$content .= $this->view('templates/footer', $vars, $return); if ($return)
{
return $content;
}
}
}

  在controller中这样调用:

<?php
$this->load->template('body');

2.继承Controller方式

  2.1.在application/core目录下定义MY_Controller内容如下:

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

  class MY_Controller extends CI_Controller
{
protected $layout = 'layout/main';
private $js_files = array();
private $css_files = array(); public function __construct()
{
parent::__construct();
}
public function add_js()
{
//添加js文件
}
public function add_css(){
//添加css文件
}
//file 表示是否使用渲染子视图文件,viewData表示的是子视图中渲染数据,$layout表示父视图中使用的全局数据
protected function render($file = NULL, &$viewData = array(), $layoutData = array())
{
if( !is_null($file) ) {
$data['content'] = $this->load->view($file, $viewData, TRUE);
$data['layout'] = $layoutData;
$this->load->view($this->layout, $data);
} else {
$this->load->view($this->layout, $viewData);
}
$viewData = array();
}
}

  2.2.在layout下建立 main.php文件,内容如下

<html>
<head>
<title><?php echo $layout['title'];?></title>
</head>
<body>
<?php echo $content?>
</body>
</html>

  2.3.在自定义controller中继承自MY_Controller,添加比如下面测试代码:

public function layout(){
$data= array('user_name'=>'张三','password'=>'密码');
$this->render('test_layout',$data,array('title'=>'测试布局'));
}

  2.4.test_layout.php代码如下

<h1><?php echo $user_name;?></h1>

3.创建Layout类库实现

  3.1.application/libraries目录下创建layout.php文件:

<?php
if (! defined ( 'BASEPATH' ))
exit ( 'No direct script access allowed' ); class Layout {
public $layout;
function __construct($params = array('layout/main')) {
$this->layout = $params [0];
}
function view($view, $data = null, $flag = false) {
$ci = &get_instance ();
$data ['__CONTENT__'] = $ci->load->view ( $view, $data, true ); // 这里的第三个参数true代表不输出,如果是false就会输出,默认是false,和thinkphp里的display和assign类似,这里用第三个参数来控制
if ($flag) {
$view = $ci->load->view ( $this->layout, $data, true );
return $view;
} else {
$ci->load->view ( $this->layout, $data, false );
}
}
}

  3.2.调用方式

			$data = array (
'username' => 'abc',
'register_url' => site_url ( '/account/register/callback' )
);
$this->layout->view ( 'oauth/callback', $data );

注:在调用之前要先加载layout库(autoload或在controller中加载)。  

ci模板布局方式的更多相关文章

  1. ThinkPHP3.1 模板布局

    ThinkPHP的模板引擎内置了布局模板功能支持,可以方便的实现模板布局以及布局嵌套功能.有三种布局模板的支持方式: 第一种方式:全局配置方式 这种方式仅需在项目配置文件中添加相关的布局模板配置,就可 ...

  2. thinkphp 模板布局

    ThinkPHP的模板引擎内置了布局模板功能支持,可以方便的实现模板布局以及布局嵌套功能. 有三种布局模板的支持方式: 第一种方式:全局配置方式 这种方式仅需在项目配置文件中添加相关的布局模板配置,就 ...

  3. android中基于HTML模板的方式嵌入SWF

    继上一篇 利用webview实现在andorid中嵌入swf 这篇继续说说通过html模板的方式来嵌入SWF,这样做的好处最直观的就是可以把html,swf和android代码串起来,交互操作很方便( ...

  4. (八)Thymeleaf的 th:* 属性之—— 模板布局& th:with& 属性优先级

    3.7 模板布局 模板名称:layout.html 3.7.1 th:fragment e.g.模板名为footer.html页面body部分如下: <body> <div th:f ...

  5. Android开发之基本控件和详解四种布局方式

    Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方 ...

  6. Android入门(十):界面的布局方式及其实际应用

    关于Android界面布局,网上已经有了很多非常不错的学习资料,在这里我也不班门弄斧了,推荐两篇我认为写的不错的教程,然后再重点讲一下几种布局方式的实际应用. 教程链接:①http://www.cnb ...

  7. 【Android UI】Android开发之View的几种布局方式及实践

    引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...

  8. 对比MFC资源文件谈谈WPF布局方式

    对比MFC资源文件谈谈WPF布局方式 MFC方式 对于传统的MFC基于UI的应用程序设计通常分两步走,首先是设计UI,使用的是RC文件,然后是代码文件,对RC文件进行操作,如下面Figure 1 的基 ...

  9. Android 开发之旅:view的几种布局方式及实践

    本文的主要内容就是分别介绍以上视图的七种布局显示方式效果及实现,大纲如下: 1.View布局概述 2.线性布局(Linear Layout) 2.1.Tips:android:layout_weigh ...

随机推荐

  1. poj1680 最短路判环

    题意:有多个银行可以换钱,每个银行可以将特定的两种钱相互兑换,并且有自己的汇率,现在问是否可以将自己的钱通过银行兑换增加. 其实比较水,主要就是知道最短路问题里的负环可以通过bellman-fold或 ...

  2. SUID,SGID,Sticky Bit详解(转)

    SUID属性 passwd命令可以用于更改用户的密码,一般用户可以使用这个命令修改自己的密码.但是保存用户密码的/etc/shadow文件的权限是400,也就是说只有文件的所有者root用户可以写入, ...

  3. CSS 通用原子类

    /*文字排版*/.f10 { font-size: 10px; }.f11 { font-size: 11px; }.f12 { font-size: 12px; }.f13 { font-size: ...

  4. (转)A Beginner's Guide To Understanding Convolutional Neural Networks Part 2

    Adit Deshpande CS Undergrad at UCLA ('19) Blog About A Beginner's Guide To Understanding Convolution ...

  5. Error using subsindex Function 'subsindex' is not defined for values of class 'struct'.

    clc; clear all; close all; image_path = '/media/wangxiao/Elements/image_segment_backup/'; savePath = ...

  6. X64相关文章

    http://www.codemachine.com/article_x64deepdive.html https://software.intel.com/sites/default/files/m ...

  7. HTML5之Canvas绘图实例——饼状图

    实现饼状分布画图(如下):调试环境:Firefox

  8. Innodb IO优化 — 数据库表设计 转

    数据库表设计这块学问比较多,我这里单从互联网角度出发同时结合Innodb的特性给出一些设计方法供大家参考.本文构建大概分两分部分:Innodb的特性及设计中如何利用这种特性. Innodb特性: In ...

  9. phonegap–app启动欢迎引导页localstorage

    对一个新的app,一般情况都会添加一个介绍和欢迎的页面来告诉用户app的功能和新的特性. 那么在phonegap项目里面如何添加这样个引导欢迎页. 这里需要注意的是只有app第一次打开的时候才会有,其 ...

  10. 【jmeter】搭建持续集成接口测试平台(Jenkins+Ant+Jmeter)

    一.环境准备: 1.JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2.Jmeter:http://jme ...