Yii框架-Smarty-整合
一、搭建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)){ } |
再次测试: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-整合的更多相关文章
- Yii框架学习笔记(二)将html前端模板整合到框架中
选择Yii 2.0版本框架的7个理由 http://blog.chedushi.com/archives/8988 刚接触Yii谈一下对Yii框架的看法和感受 http://bbs.csdn.net/ ...
- PHP Yii框架中使用smarty模板
第一种方法 按照YII系统的办法生成视图觉得有点麻烦,觉得用smarty更省事.尝试着把smarty模板加进来了. date_default_timezone_set("PRC") ...
- 使用 OAuth2-Server-php 在 Yii 框架上搭建 OAuth2 Server
原文转自 http://www.cnblogs.com/ldms/p/4565547.html Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后 ...
- Yii 框架学习--01 框架入门
Yii 是一个高性能的,适用于开发 WEB2.0 应用的 PHP 框架. Yii目前有两个主要的版本: 2.0 和 1.1.本文以YII 2.0.7为例. 环境需求 Yii2.0 框架有一些系统上的需 ...
- yii框架
Yii Framework是一个基于组件.用于开发大型 Web 应用的高性能 PHP 框架.Yii提供了今日Web 2.0应用开发所需要的几乎一切功能.Yii是最有效率的PHP框架之一.Yii是创始人 ...
- YII框架的使用
YII框架的使用 spit: 吐痰,吐口水, 过去式: spat spat: 本身也可以作为一个单词, 意思是: "小打小闹""小的吵闹""小争吵&q ...
- 三大框架SSH整合
三大框架SSH整合 -------------------------------Spring整合Hibernate------------------------------- 一.为什么要整合Hi ...
- yii框架安装心得
最近在学习yii框架, 现在将遇到的一些问题和解决方法写出来与大家分享. yii框架的安装: 下载yii框架之后, 打开文件运行init.bat文件, 如果闪退就打开php的扩展(php_openss ...
- Yii框架 400 错误
YII 400错误 在YII框架中400错误是csrf校验失败的意思 csrf是什么? CSRF(Cross-site request forgery跨站请求伪造,也被称为"One Cli ...
随机推荐
- memcached完全剖析--1
memcached的基础 翻译一篇技术评论社的文章,是讲memcached的连载.fcicq同学说这个东西很有用,希望大家喜欢. 发表日:2008/7/2 作者:长野雅广(Masahiro Nagan ...
- 《Nodejs开发加密货币》之二十七:开发通用的HTML组件
人的懒惰常常是麻烦的开始.多数程序员都希望自己的工作一劳永逸,一次开发,到处使用,成了人人追逐的目标,我也不例外.最初写<Nodejs开发加密货币>系列文章,因为不喜欢设定好了去写,所以目 ...
- 4.MVC框架开发(母版页的应用、按钮导致的Action处理、从界面向控制器传数据和HtmlHelper控件的实现(注册的实现))
1.在视图里如何引入母版页 1)在视图里母版页都是放在View目录下面的Shared文件夹下面 2)母版页里的RenderBody()类似于ASP.NET里面的ContentPalceHolder占位 ...
- android:Faild to install,你的主机中的软件终止了一个连接错误解决
当在用真机调试android程序时出现Faild to install,你的主机中的软件终止了一个连接错误时可以这样解决: 在手机开启usb调试和安装未知来源软件的情况下: 1:先查进入任务管理器查看 ...
- HAProxy 的负载均衡服务器,Redis 的缓存服务器
问答社区网络 StackExchange 由 100 多个网站构成,其中包括了 Alexa 排名第 54 的 StackOverflow.StackExchang 有 400 万用户,每月 5.6 亿 ...
- [转载]Winform等待窗口的实现(附源代码)
在开发Winform程序的时候,经常会用到等待窗口(如网络通讯.数据库连接等需要一定时间来执行的操作),这样可以给用户提供更好的体验. 等待窗口的主要功能是一边执行需要等待的操作,一边显示一个等待界面 ...
- MySQL函数讲解(MySQL函数大全)
讲mysql函数之前先给大家展示一下利用mysql函数的一个例子: SELECT i.item_id, i.item_name, i.cid, i.last_update_time, u.url, u ...
- 推荐一本书《深入理解PHP内核》
<深入理解PHP内核> 在线网址:http://www.php-internals.com/
- 怎么修改tomcat默认访问首页
一般情况下安装好tomcat之后我们的默认访问首页是index了,但我们如果要修改或增加一个默认首页,我们可参考下面办法来解决. 通过 ip:port 访问到的是 tomcat 的管理页面,其他常规部 ...
- javaweb学习总结(二十八)——JSTL标签库之核心标签
一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二.JSTL标签库的分类 核心 ...