CI框架(CI3.0.6)完美整合Smarty模板引擎(Smarty3.1.29)

配置

1. 下载ci框架和smarty, 创建项目目录

# /var/www 为web根目录
$ cd ~/download
$ wget https://codeload.github.com/bcit-ci/CodeIgniter/zip/3.0.6
$ wget https://codeload.github.com/smarty-php/smarty/zip/v3.1.29
$ unzip CodeIgniter-3.0.6.zip
$ unzip smarty-3.1.29.zip
$ mv CodeIgniter-3.0.6 /var/www/ci_smarty
$ mv smarty-3.1.29/libs /var/www/ci_smarty/application/libraries/smarty3.1.29

2. 在 /var/www/ci_smarty/application/libraries 目录下创建 Ci_smarty.php 文件,代码如下:

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

require(APPPATH.'libraries/smarty3.1.29/Smarty.class.php');
class Ci_smarty extends Smarty {
    protected $ci;
    public function __construct()
    {
        parent::__construct();
        $this->ci = & get_instance();
        $this->ci->load->config('smarty');//加载smarty的配置文件
        $this->cache_lifetime =$this->ci->config->item('cache_lifetime');
        $this->caching = $this->ci->config->item('caching');
        $this->config_dir = $this->ci->config->item('config_dir');
        $this->template_dir = $this->ci->config->item('template_dir');
        $this->compile_dir = $this->ci->config->item('compile_dir');
        $this->cache_dir = $this->ci->config->item('cache_dir');
        $this->use_sub_dirs = $this->ci->config->item('use_sub_dirs');
        $this->left_delimiter = $this->ci->config->item('left_delimiter');
        $this->right_delimiter = $this->ci->config->item('right_delimiter');
    }
}

3. 在 /var/www/ci_smarty/application/config 目录下创建 smarty.php 文件,代码如下:

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

$config['cache_lifetime'] = 60;
$config['caching'] = true;
$config['template_dir'] = APPPATH .'views';
$config['compile_dir'] = APPPATH .'views/template_c';
$config['cache_dir'] = APPPATH . 'views/cache';
$config['config_dir'] = APPPATH . 'views/config';
$config['use_sub_dirs'] = false; //子目录变量(是否在缓存文件夹中生成子目录)
$config['left_delimiter'] = '{';
$config['right_delimiter'] = '}';

4. 在 /var/www/ci_smarty/application/core 目录下创建 MY_Controller.php 文件,代码如下:

<?php
class MY_controller extends CI_Controller
{
    public function __construct()
    {

        date_default_timezone_set("PRC");

        parent::__construct();

    }

    public function assign($key,$val)
    {
        $this->ci_smarty->assign($key,$val);
    }

    public function display($html)
    {
        $this->ci_smarty->display($html);
    }
}

此时, 所有的配置工作已经完成, 接下来看如何使用:

使用方法

1. 加载smarty类

有两种方法, 如果随时会用到, 推荐使用自动加载办法:
1). 在 ci框架的配置目录 config 下的 autoload.php 中自动加载类增加 smarty 类, 相关部分代码如下:

$autoload['libraries'] = array('ci_smarty');

如果只想在用到的时候加载, 则在对应的控制器的初始化方法中加载, 或者在对应的控制器的对应的方法中加载:
2). 直接执行 ci 的加载类方法:

$this->load->library("Ci_smarty");

2. 使用smarty

1). 在ci默认控制器 Welcome.php 中, 修改 index 方法如下:

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

class Welcome extends MY_Controller  {

    public function index()
    {
        $test='ci 3.0.6 结合 smarty 3.1.2 配置成功';
        $this->assign('data',$test);
        $this->display('test.html');
    }
}

2). 在 views 目录, 创建 test.html 文件, 代码如下:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>smarty结合ci使用测试</title>
    </head>
    <body>
    {$data}
    </body>
</html>

3). 浏览器访问: localhost/ci_smarty, 输出:
ci 3.0.6 结合 smarty 3.1.2 配置成功


notes: 运行之后, 会在views目录生成一个编译目录template_c, 如果在配置文件中开启了cache缓存, 则会生成对应的cache目录, 具体的目录, 皆可在config/smarty.php中配置

开启smarty分配数据时的 debug

1./php/phplib/ext/smarty/
2.打开默认smarty的debug. 修改当前smarty目录 Smarty.class.php; 修改 360行, public $debugging_ctrl = 'URL'; 此处默认为 "NONE";
3.需要将debug.tpl发送到 smarty目录
URL?SMARTY_DEBUG 可以打印数据

可以弹出窗口显示分配的数据,有array() 和 json 两种 格式


更改的部分托管于github, 地址为fizzday: https://github.com/fizzday/ci_smarty
参考地址: 吐蕃赞普的新浪博客
大功告成, 完美手工~~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,650评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,050评论 25 707
  • PHP 学习目录 ├─PHP视频教程 1 LAMP网站构建 │ ├─PHP教程 1.1.1 新版视频形式介绍│ ...
    曹渊说创业阅读 16,155评论 29 417
  • 食 我本是一枚吃货, 可一遇上妳, 就吃不下了, 因为秀色可餐。 色 我原是一个逗比, 可一遇上你, 就端起来了,...
    乡下童姥阅读 372评论 0 5
  • 记得之前苏苏说过要是想成功,你得你敢于做一些反人性的事,比如说反懒惰。 常人做事大部分都是三天打鱼两天晒网,而且是...
    诗蒙阅读 271评论 0 0