zoukankan      html  css  js  c++  java
  • ci模板布局方式

    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中加载)。  

  • 相关阅读:
    Android——活动的基本用法
    开课第五周周总结
    java常用框架
    javaweb学习
    每日日报2021.3.23
    每日日报2021.3.22
    每日日报2021.3.21
    每日日报2021.3.19
    每日日报2021.3.18
    每日日报2021.3.17
  • 原文地址:https://www.cnblogs.com/jenqz/p/4361502.html
Copyright © 2011-2022 走看看