热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Yii框架Smarty整合

一、搭建yii框架一、首先你得下个YII框架的源码;下载地址:http:www.yiiframework.comdownload二、把下载到的源码解压放

 一、搭建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” 即可创建 ---> 回车后出现那么的一堆东西,主要下最下面,如果是这样就是成功了,如图:image

--> 浏览器上进行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

   //载入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
  
  
   你好,{$name}!
  
  

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文件具体内容如下(意思自己体会理解):

 

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 = '}';

       $this->cache_lifetime = 3600;

    }

    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}

 
 
 
 
 
 
 你好,{$name}!
 
 

此时系统会报错:

原因: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了。

转:https://www.cnblogs.com/siliconvalley/p/3204746.html



推荐阅读
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 安装 IIS 5.1 并注册 .NET 2.0 后,访问页面时出现 500 错误。本文提供详细的步骤和解决方案,帮助您解决该问题。 ... [详细]
  • 近期,微信公众平台上的HTML5游戏引起了广泛讨论,预示着HTML5游戏将迎来新的发展机遇。磊友科技的赵霏,作为一名HTML5技术的倡导者,分享了他在微信平台上开发HTML5游戏的经验和见解。 ... [详细]
  • 深入解析HTML5字符集属性:charset与defaultCharset
    本文将详细介绍HTML5中新增的字符集属性charset和defaultCharset,帮助开发者更好地理解和应用这些属性,以确保网页在不同环境下的正确显示。 ... [详细]
  • 本文介绍如何通过 Python 的 `unittest` 和 `functools` 模块封装一个依赖方法,用于管理测试用例之间的依赖关系。该方法能够确保在某个测试用例失败时,依赖于它的其他测试用例将被跳过。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文介绍了如何使用 CMD 批处理脚本进行文件操作,包括将指定目录下的 PHP 文件重命名为 HTML 文件,并将这些文件复制到另一个目录。 ... [详细]
  • 本文将详细介绍如何在Webpack项目中安装和使用ECharts,包括全量引入和按需引入的方法,并提供一个柱状图的示例。 ... [详细]
  • 在Windows系统中安装TensorFlow GPU版的详细指南与常见问题解决
    在Windows系统中安装TensorFlow GPU版是许多深度学习初学者面临的挑战。本文详细介绍了安装过程中的每一个步骤,并针对常见的问题提供了有效的解决方案。通过本文的指导,读者可以顺利地完成安装并避免常见的陷阱。 ... [详细]
  • 2.2 组件间父子通信机制详解
    2.2 组件间父子通信机制详解 ... [详细]
  • PHP 各版本对比:标准版与最新顶级版的详细分析 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
author-avatar
手机用户2602938875
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有