CodeIgniter支持smarty,并配置支持layout

阅读更多

以插件形式加入smarty.

根据CI的规则。

下载smarty,并将其放到application/libraries/smarty下。

新建Cismarty.php,放在application/libraries下

 

[php:showcolumns:firstline[1]]  view plain copy
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. 'BASEPATH'or die('Access restricted!');  
  2. /* 
  3.  * 作者:晋勇 
  4.  */  
  5. require(APPPATH.'libraries/smarty/Smarty.class.php');  
  6. class Cismarty extends Smarty  
  7. {  
  8.     public $ext = 'tpl';  
  9.     public $dir = '';  
  10.     public $layout = 'layout/main';  
  11. /** 
  12.   * 构造函数 
  13.   * 
  14.   * @access public 
  15.   * @param array/string $template_dir 
  16.   * @return obj  smarty obj 
  17. */  
  18.     public function __construct($template_dir = ''$compile_dir = ''$config_dir = ''$cache_dir = '')  
  19.     {  
  20.          $this->Smarty();  
  21.          if(is_array($template_dir)){  
  22.           foreach ($template_dir as $key => $value) {  
  23.            $this->$key = $value;  
  24.           }  
  25.          }  
  26.          else {  
  27.             $this->cache_dir    = $cache_dir    ? $cache_dir    : BASEPATH . 'cache/';  
  28.             $this->template_dir  =   $template_dir ? $template_dir : APPPATH . 'views/';  
  29.             $this->compile_dir   =   $compile_dir  ? $compile_dir  : APPPATH . 'tpl_c/';  
  30.             $this->compile_check =   true;  
  31.             $this->debugging     =   false;  //debug模式  
  32.             $this->caching       =   0;  //启用缓存  
  33.             $this->cache_lefetime=   6000;//缓存时间s  
  34.             $this->left_delimiter=   '';  
  35.          }  
  36.     }  
  37.       
  38.     /** 
  39.      * 显示输出页面 
  40.      * @access public 
  41.      * @return string 
  42.      */  
  43.     public function show($tpl){  
  44.         $this->assign('jsFiles',$this->getJsHtml());  
  45.         $this->assign('jsFiles1',$this->getJsHtml(1));  
  46.         $this->assign('LAYOUT'$this->dir ? $this->dir.'/'.$tpl.'.'.$this->ext : $tpl.'.'.$this->ext);  
  47.         $this->display($this->layout.'.'.$this->ext);  
  48.     }  
  49.     /** 
  50.      * 添加一个CSS文件包含 
  51.      * @param string $file 文件名 
  52.      * @access public 
  53.      * @return void 
  54.      */  
  55.     public function addCss($file) {  
  56.         if (strpos($file,'/')==false) {  
  57.             $file = config_item('css') . $file;  
  58.         }  
  59.         $GLOBALS['cssFiles'][$file] = $file;  
  60.     }  
  61.     /** 
  62.      * 添加一个JS文件包含 
  63.      * @param string $file 文件名 
  64.      * @access public 
  65.      * @return void 
  66.      */  
  67.     public function addJs($file,$btm=NULL) {  
  68.         if (strpos($file,'/')==false) {  
  69.             $file = config_item('js') . $file;  
  70.         }  
  71.         if ($btm==NULL) {  
  72.             $GLOBALS['jsfiles'][$file] = $file;  
  73.         } else {  
  74.             $GLOBALS['jsbtmfiles'][$file] = $file;  
  75.         }  
  76.     }  
  77.     /** 
  78.      * 取生成的包含JS HTML 
  79.      * @access public 
  80.      * @return string 
  81.      */  
  82.     public function getJsHtml($btm=NULL) {  
  83.         $html = '';  
  84.         if (!$GLOBALS['jsfiles']) {  
  85.             return;  
  86.         }  
  87.         $jsFile = $btm?'jsbtmfiles':'jsfiles';  
  88.         if (@$GLOBALS[$jsFile]) {  
  89.             foreach ($GLOBALS[$jsFileas $value) {  
  90.                 $html .= $this->jsInclude($value,true)."/n";  
  91.             }  
  92.             return $html;  
  93.         } else {  
  94.             return ;  
  95.         }  
  96.     }  
  97.     /** 
  98.      * 添加html标签 
  99.      * @param string $tag 标签名 
  100.      * @param mixed $attribute 属性 
  101.      * @param string $content 内容 
  102.      * @return string 
  103.      */  
  104.     public function addTag($tag$attribute = NULL, $content = NULL) {  
  105.         $this->js();  
  106.         $html = '';  
  107.         $tag = strtolower($tag);  
  108.         $html .= '<'.$tag;  
  109.         if ($attribute!=NULL) {  
  110.             if (is_array($attribute)) {  
  111.                 foreach ($attribute as $key=>$value) {  
  112.                     $html .= ' '.strtolower($key).'="'.$value.'"';  
  113.                 }  
  114.             } else {  
  115.                 $html .= ' '.$attribute;  
  116.             }  
  117.         }  
  118.         if ($content) {  
  119.             $html .= '>'.$content.'.$tag.'>';  
  120.         } else {  
  121.             $html .= ' />';  
  122.         }  
  123.         $this->output .= $html;  
  124.         return $html;  
  125.     }  
  126.     /** 
  127.      * 添加html文本 
  128.      * @param string $content 内容 
  129.      * @return string 
  130.      */  
  131.     public function addText($content) {  
  132.         $this->js();  
  133.         $content = htmlentities($content);  
  134.         $this->output .= $content;  
  135.         return $content;  
  136.     }  
  137.     /** 
  138.      * 添加js代码 
  139.      * @param string $jscode js代码 
  140.      * @param bool $end 是否关闭js 代码块 
  141.      * @return void 
  142.      */  
  143.     public function js($jscode = NULL, $end = false) {  
  144.         if (!$this->inJsArea && $jscode) {  
  145.             $this->output .= "/n'JavaScript' type='text/javascript'>/n  
  146. // -->/n";  
  147.             $this->inJsArea = false;  
  148.         } else {  
  149.             $this->output .= "/t$jscode/n";  
  150.             if ($end) {  
  151.                 $this->js();  
  152.             }  
  153.         }  
  154.         return;  
  155.     }  
  156.     /** 
  157.      * 添加js提示代码 
  158.      * @param string $message 提示内容 
  159.      * @param bool $end 是否关闭js 代码块 
  160.      * @return void 
  161.      */  
  162.     public function jsAlert($message$end = false) {  
  163.         $this->js('alert("' . strtr($message'"''//"') . '");'$end);  
  164.     }  
  165.     /** 
  166.      * 添加js文件包含 
  167.      * @param string $fileName 文件名 
  168.      * @param bool $defer 是否添加defer标记 
  169.      * @return string 
  170.      */  
  171.     public function jsInclude($fileName,$return = false, $defer = false) {  
  172.         if (!$return) {  
  173.             $this->js();  
  174.         }  
  175.         $html = '  
  176.                 . $fileName . '" mce_src="'  
  177.                 . $fileName . '"' . ( ($defer) ? ' defer' : '' )  
  178.                 . '>';  
  179.         if (!$return) {  
  180.             $this->output .= $html;  
  181.         } else {  
  182.             return $html;  
  183.         }  
  184.     }  
  185.     /** 
  186.      * 添加css文件包含 
  187.      * @param string $fileName 文件名 
  188.      * @return string 
  189.      */  
  190.     public function cssInclude($fileName,$return = false) {  
  191.         if (!$return) {  
  192.             $this->js();  
  193.         }  
  194.         $html = ' . $fileName . '" mce_href="' . $fileName . '" rel=stylesheet>' . chr(13);  
  195.         if (!$return) {  
  196.             $this->output .= $html;  
  197.         } else {  
  198.             return $html;  
  199.         }  
  200.     }  
  201.     /** 
  202.      * 输出html内容 
  203.      * @param bool $print 是否直接输出,可选,默认返回 
  204.      * @return void 
  205.      */  
  206.     public function output($print = false) {  
  207.         $this->js();  
  208.         if ($print) {  
  209.             echo $this->output;  
  210.             $this->output = '';  
  211.             return;  
  212.         } else {  
  213.             $output = $this->output;  
  214.             $this->output = '';  
  215.             return $output;  
  216.         }  
  217.     }  
  218. }  
  219. ?>  
 

 

打开配置文件(config/autoload.php)

$autoload['libraries'] = array('cismarty');//加入cismarty

这样在所有应用中,都可以使用$this->cismarty来调用smarty实例了。

 

Cismarty类已经在原有的smarty::display基础上做了小的改动,已经支持layout功能

默认加载view/layout/main.tpl作为布局文件。

可以通过$this->cismarty->layout = "xxxx"来更改

 

http://blog.csdn.net/a600423444/article/details/5892726

你可能感兴趣的:(CodeIgniter,smarty,layout)