一、搭建yii框架

一、首先你得下个YII框架的源码 ;下载地址:http://www.yiiframework.com/download/

二、把下载到的源码解压放到一个PHP可访问的位置;如我的 F:/site(已具备了php环境了哦!);

与此同时,在site文件夹下会看到解压到的相关文件及文件夹有:1、LICENSE 2、CHANGELOG 3、README 4、UPGRADE 5、demos 5、framework 6、requirements 7、testDemo (大概共七个)

三、解压完成后,在php.ini中开启yii所需的基本配置模块; 你可运行 requirements文件夹下的index.php文件 进行检查一下YII配置需求 ;我的为:http://site/requirements/index.php  如图(对应下,结果所对应的那一栏如果发现有“未通过”的你在在php所安装的目录下找到php.ini,把他们所对应的注释去掉即可):

php若不在C盘,应该其配置文件拷至c:\windows下;相应dll模块拷入system32下;添加php5环境变量添量path;(XP)

四、然后的话,就是配置计算机的环境变量了,也就是把php所安装的路径添加到path中去;

具体的操作步骤为:

鼠标右键我的电脑图标—>  选择弹出窗的“属性”选项-->点击“高级”选项卡—>在选项卡下面找到“环境变量选项”进入-->在“系统变量(s)”处找到变量名为“Path”双击打开编辑—> 加入php所在的安装目录即可;如我的为:C:\php5

五、好,搞定相关的配置后,接下来就是创建一个YII的应该啦;一般操作如下:

打开命令提示符cmd(可以在开始--运行--输入cmd 回车即可) —> 进入yii 所在文件下的framework文件夹 如我的为:F:/site/framework,如下图:

--> 执行命令在site下创建站点名为“demo”的应用(操作为:执行命令—yiic webapp ../demo)回车如下图:

--> 输入“yes” 或“y” 即可创建 ---> 回车后出现那么的一堆东西,主要下最下面,如果是这样就是成功了,如图:

--> 浏览器上进行http://site/demo/index.php  看到这样(如下图),那么恭喜你,一个静态的站点你建立成功了;

TIPS:在运行 http://site/demo/index.php 时,你有可能会遇到,打不开,出现date();的问题,放心,别紧张,follow me…

找到PHP所在安装目录中的php.ini文件---> 打开找到“date.timezone” –> 把前面的注释去掉并给其赋值为PRC(即中华人民共和国的意思),修改后,整行即为date.timezone = 'PRC' [北京时间]

二、搭建smarty模板引擎

1、下载Smarty包
     可以从官方站点下载:http://smarty.php.net

2、解压缩Smarty包并找到合适的位置存放.解压之后文件夹名可能是Smarty.x.x.x,把它修改成smarty(此处只为将来使用方便起见,并非必须),然后将含有Smarty文件的文件夹拷贝到某一个目录下(建议不要放在你的网站目录下,这样别人可以通过路径访问到这些文件,如果非要放在网站目录下,那最好目录的名字起的生僻一些。这些文件即使被别人访问到,也未必造成安全问题,但是一切都为了以防万一)。
    在文章的下面内容中,我们都是假设你的文件放在了d:\smarty下。

3、找到你的php.ini配置文件(可以通过运行phpinfo()查看此文件路径,但一般都放在系统目录下)修改php.ini的include_path选项,把smarty的库文件路径加上,比如:
    include_path = ".;d:\smarty\libs"
    提醒一下,php.ini中一共有两处include_path,一处是Unix下使用的,一处是windows下使用的,要修改windows下使用的:
-------------------------------------------------------------
; Windows: "\path1;\path2"

include_path = ".;c:\php\includes;D:\PHP\Smarty\libs"
--------------------------------------------------------------
4、重新启动IIS/APACHE,重新启动的目的是使刚才的修改生效。
重新启动的方法很简单,APACHE直接restart即可。对于IIS,可以用net stop iiadmin命令关闭iis,然后用net start w3svc命令启动,就完成了重新启动。如果实在不会重启,就干脆重新启动计算机,这样最省事。
设置之后,在php文件中可以用include("Smarty.class.php");语句直接调用。

5、在你的网站目录下创建一个文件夹,名字任意,假设叫MySmarty:
    然后再在这个MySmarty目录下创建2个文件夹,templates和configs。
    创建完成之后如下:
    (你的网站目录)/MySmarty/templates     (这个目录用来存放模版)
    (你的网站目录)/MySmarty/configs   (这个目录用来存放一些配置信息)

6、在MySmarty目录下再创建两个文件夹,名字分别叫:smarty_cache和smarty_templates_c。为什么刚才不一起创建呢?因为这个步骤在原来的官方资料中没有,而我在配置过程中发现,如果没有这两个文件夹,smarty将无法工作,不知道是不是官方资料的smarty版本和目前最新的版本有出入的原因。但是只要配置这两个目录,Smarty便可以顺利工作。因此建议进行配置。

7、这时候你别忘了把我们上面从一开始到现在创建的四个文件夹的权限设置好。当然还包括存放smarty的文件夹d:\smarty的权限,因为有的NTFS格式的系统有严格的权限规定,你的目录创建之后还得有足够的权限才能让web程序访问。一般来说win2000和win2003下采用NTFS分区格式的系统需要做这样的设定,具体方法是在文件夹上点击右键,在“属性”中打开“安全”标签,在里面列出了可以访问这个目录的用户列表,如果没有web访问权限,则需要添加,把Internet来宾帐户和启动IIS进程帐户两个帐户都添加上即可。如果觉得麻烦,可以直接将Everyone用户组添加上,允许任何用户访问。

8、这时候安装工作基本完成,可以进行第一个简单例子的测试:
    在你的网站目录下建立 index.php文件,并且在(网站目录)/smarty/templates/下建立index.tpl文件,分别输入以下代码   index.php

<?php
   //载入Smarty库
   include("Smarty.class.php");
   $smarty = new Smarty();
   //下面的(你的网站目录)用绝对路径,比如d:/intepub/wwwroot
   $smarty->template_dir = 'D:/WorkSpace/PHP/MySmarty/templates';
   $smarty->config_dir = 'D:/WorkSpace/PHP/MySmarty/config';
   $smarty->cache_dir = 'D:/WorkSpace/PHP/MySmarty/smarty_cache';
   $smarty->compile_dir = 'D:/WorkSpace/PHP/MySmarty/smarty_templates_c';
   //上面四行为使用Smarty前的必要参数配置
   $smarty->assign('name','跟17PHP学安装Smarty');
   $smarty->display('index.tpl');
?>
templates文件夹下
   index.tpl
   <html>
   <body>
   你好,{$name}!
   </body>
   </html>

9、现在终于可以观看以下自己的杰作了。运行index.php(当然是在你的web服务器上运行,和运行普通php文件完全一样。)
   http://localhost/index.php
   这时候如果看到下面的输出结果,说明你安装成功了~~~是不是很简单呢?
   你好,跟17PHP学安装Smarty!

后记:虽然到此为止Smarty的安装已经完成,但是站长还是想给大家一点小建议。在上面的小例子中,可以发现如果我们每次使用Smarty前都需要设置参数,那未免过于麻烦。这时候你可以把smarty信息设置的四行代码包裹在一个类或者一个包含文件当中。这样就不用每次使用前都首先配置信息。关于这个就是Smarty的使用知识了,本篇文章不再涉及。站长目前也处在学习过程中,等到后面再继续推出和Smarty相关的文章吧~~~

三、整合

1. 在protected目录下建立文件夹vendor/smarty,把smarty的类包libs文件夹内容放入其中;

2. 在extensions目录下边建立文件CSmarty.php

CSmarty.php文件具体内容如下(意思自己体会理解):

<?php

require_once(Yii::getPathOfAlias('application.vendor.smarty').DIRECTORY_SEPARATOR.'Smarty.class.php');

define('SMARTY_VIEW_DIR',Yii::getPathOfAlias('application.views.smarty'));

class CSmarty extends Smarty {

const DS =DIRECTORY_SEPARATOR;

function __construct() {

parent::__construct();

$this->template_dir =SMARTY_VIEW_DIR.self::DS.'tpl';

$this->compile_dir =SMARTY_VIEW_DIR.self::DS.'tpl_c';

$this->caching = true;

$this->cache_dir =SMARTY_VIEW_DIR.self::DS.'cache';

$this->left_delimiter =  '{';

$this->right_delimiter = '}';

;

}

function init() {}

}

3. 根据CSmarty.php代码内容建立相应的文件夹(views下tpl,tpl_c,cache)

4. 主配置文件设置

打开protected/config/main.php

在components数组中加入

'smarty'=>array(

'class'=>'application.extensions.CSmarty',

),

5. 得到smarty实例 (修改actionindex函数)

在控制器(protected/components/controler或controler/site)里边:

public function actionIndex(){

Yii::app()->smarty-> assign('name','张三');   //Yii::app()->smarty(); (X)

Yii::app()->smarty-> display('a.tpl');

}

a.tpl所在目录protected/views/smarty/tpl/a.tpl,具体代码{$name}

<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
 <title>你好,{$name}!</title>
 </head>
 <body>
 你好,{$name}!
 </body>
 </html>

此时系统会报错:

 

原因:YII注册了一个自动加载类spl_autoload_register(array('YiiBase','autoload')),SMARTY也注册了一个自动加载类,spl_autoload_register('smartyAutoload'),YII 注册在前,这样在遇到一个类名的时候,先执行的是YII的自定义自动加载类的函数,对应SMARTY里的每个类名而言,也是先调用YII的自动加载类的函 数,但是如果不符合YII自动加载的条件的话,就会执行SMARTY的自动加载类的函数,然而,SMARTY的类名在自动加载类的时候,确符合了YII自 动加载类的逻辑语句,结果就是YII使用Include语句要包含的类肯定找不到。

解决方法:

当SMARTY的类自动加载的时候,跳出在YII定义的自动加载函数,这样就会执行SMARTY的加载函数。

具体实现是,修改YIIBase类(frame目录下)里面的autoload函数,增加如下代码:

  public static function autoload($className){

//只要类名包含smarty的,无论大小写,都返回,

//这样就跳出了YII自动加载类而去执行SMARTY的自动加载类函数了

  if(preg_match('/smarty/i', $className)){

    
return;

}

再次测试:OK

6. 优化(通过)

在action中直接用Yii::app()->smarty就可以试用smarty了。

如果每次在action中使用Yii::app()->smarty比较麻烦的话,

可以在components下的Controller中可以加入

protected $smarty = '';

protected function init() { ------public????

$this->smarty = Yii::app()->smarty;

}

然后在action中就直接可以用$this->smarty使用smarty了。

Yii框架-Smarty-整合的更多相关文章

  1. Yii框架学习笔记(二)将html前端模板整合到框架中

    选择Yii 2.0版本框架的7个理由 http://blog.chedushi.com/archives/8988 刚接触Yii谈一下对Yii框架的看法和感受 http://bbs.csdn.net/ ...

  2. PHP Yii框架中使用smarty模板

    第一种方法 按照YII系统的办法生成视图觉得有点麻烦,觉得用smarty更省事.尝试着把smarty模板加进来了. date_default_timezone_set("PRC") ...

  3. 使用 OAuth2-Server-php 在 Yii 框架上搭建 OAuth2 Server

    原文转自 http://www.cnblogs.com/ldms/p/4565547.html Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后 ...

  4. Yii 框架学习--01 框架入门

    Yii 是一个高性能的,适用于开发 WEB2.0 应用的 PHP 框架. Yii目前有两个主要的版本: 2.0 和 1.1.本文以YII 2.0.7为例. 环境需求 Yii2.0 框架有一些系统上的需 ...

  5. yii框架

    Yii Framework是一个基于组件.用于开发大型 Web 应用的高性能 PHP 框架.Yii提供了今日Web 2.0应用开发所需要的几乎一切功能.Yii是最有效率的PHP框架之一.Yii是创始人 ...

  6. YII框架的使用

    YII框架的使用 spit: 吐痰,吐口水, 过去式: spat spat: 本身也可以作为一个单词, 意思是: "小打小闹""小的吵闹""小争吵&q ...

  7. 三大框架SSH整合

    三大框架SSH整合 -------------------------------Spring整合Hibernate------------------------------- 一.为什么要整合Hi ...

  8. yii框架安装心得

    最近在学习yii框架, 现在将遇到的一些问题和解决方法写出来与大家分享. yii框架的安装: 下载yii框架之后, 打开文件运行init.bat文件, 如果闪退就打开php的扩展(php_openss ...

  9. Yii框架 400 错误

    YII  400错误 在YII框架中400错误是csrf校验失败的意思 csrf是什么? CSRF(Cross-site request forgery跨站请求伪造,也被称为"One Cli ...

随机推荐

  1. 《APUE》第三章笔记(4)及习题3-2

    APUE第三章的最后面给出的函数,现在还用不着,所以,先留个名字,待到时候用着了再补上好了. dup和dup2函数:用来复制文件描述符的 sync函数,fsync函数和fdatasync函数:大致的功 ...

  2. JSON Date Format/JSON 日期格式方法分享

    我是很懒的,不想多说,所以直接上代码.亲们懂的. <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://w ...

  3. MySQL查看和修改字符编码

    MySQL的默认编码是Latin1,不支持中文,要支持中午需要把数据库的默认编码修改为gbk或者utf8. 1.需要以root用户身份登陆才可以查看数据库编码方式(以root用户身份登陆的命令为:&g ...

  4. [CSS]white-space 属性详解

    实例 规定段落中的文本不进行换行: p { white-space: nowrap } 可能的值 值 描述 normal 默认.空白会被浏览器忽略. pre 空白会被浏览器保留.其行为方式类似 HTM ...

  5. 使用phpize安装php模块

    1.下载包 2./usr/local/php/bin/phpize 3../configure --enable-soap  --with-php-config=/usr/local/php/bin/ ...

  6. 一个月时间整理《深入浅出Node.js》

    今天终于把朴灵老师写的<深入浅出Node.js>给学习完了, 这本书不是一本简单的Node入门书籍,它没有停留在Node介绍或者框架.库的使用层面上,而是从不同的视角来揭示Node自己内在 ...

  7. RasAPI函数实现PPPOE拨号

    unit uDial; interface uses Windows,Messages, SysUtils, Ras;// Classes; var //EntryName,UserName,Pass ...

  8. 走进WCF一 (异常如此多娇,引无数码农竞折煞)

    对于WCF一直都是只知其然,公司框架的架构者也只是对我们授之以鱼,而不授之以渔. 带着初学者的态度进入了大神Artech的博客,逐步慢慢上手. 我的解决方案(和大神的一模一样,只是过程中一波三折的) ...

  9. Java学习--String、StringBuffer与StringBuilder

    String并不是基本数据类型,而是一个对象,并且是不可变的对象.String类为final型的不可被继承,而且通过查看JDK文档会发现几乎每一个修改String对象的操作,实际上都是创建了一个全新的 ...

  10. 用shell查找某个目录下最大文件

    网上资料学习: 1.查找当前目录下最大文件(包括子目录里文件): find . -type f -exec stat -c "%s %n" {} \; | sort -nr | h ...