thinkphp3.0中模板保存到数据库
- 格式:doc
- 大小:83.00 KB
- 文档页数:9
竭诚为您提供优质文档/双击可除thinkphp,assign,传值到模板篇一:thinkphp前台模板的语法一、导入css和js文件的三种方式(了解)1、link方式(常规)//导入public文件夹下面的js目录中的test.js文件和css文件夹下的test.css文件2.import//导入public文件夹下面的js目录中的test.js文件,import标签可以省略type属性,默认就是public文件夹下的js文件夹,且默认是js文件。
//可以更改默认文件夹设置basepath属性3.load//方法可以自动检测导入的文件类型二、分支结构在前天模板上ifelse等都是以标签形式存在的(重点)1、if($age 未成年}elseif($age=18){青春期}else{成年}在前台模板中的代码如下:未成年青春年少成年解析:condition就是if的条件,注意if是个双标签,而else和elseif是个单标签,另外大家会发现我们用eq 代替了等于,lt代替了小于因为在前天模板中是不能用=,>gt//greaterthan==eq//equal>=egt//equalgreaterthan!=neq//notequal===heq//恒等于的h理解为汉语恒的首字母比较好理解,其实h是一个非常负载的单词,随意我们就不写了。
!==nheq//no同理得switch的用法,name中的值也就是switch中那个要变的值一个和尚挑水吃两个和尚台水吃三个和尚没水吃这里是默认值三、循环结构(重点)1.for下面的for语句相当于for($i=0;$i{$i}abc解析:1、tart,end不用说,也就是起始值和结束值;name值默认为i,在下面打上$i可以直接输出输出的序号值,从0开始2、step是间隔多少的意思,里面的值为正,则为几++,为负则为几——;3、comparison中的值是for语句里第二句的符号,也就是小于号;2.volist{$ername}volist循环输出从后台传来的list值,然后再这里命名为v,在下面用$v.名称,输出对应的值。
ThinkPHP3 手册1. 简介ThinkPHP是一款基于MVC模式开发的PHP框架,它以简单、高效、灵活和安全为设计理念。
ThinkPHP3是ThinkPHP框架的第三个版本,具有更加强大的功能和更好的性能。
本手册将详细介绍ThinkPHP3框架的各个方面,包括安装、配置、路由、控制器、模型、视图等内容。
通过学习本手册,您将能够深入了解和掌握ThinkPHP3框架的使用方法。
2. 安装与配置2.1 环境要求•PHP版本:5.2.0及以上•MySQL版本:5.0及以上•Web服务器:Apache或Nginx2.2 安装步骤1.下载ThinkPHP3框架的压缩包,并解压到您的Web服务器根目录下。
2.配置您的Web服务器,使其指向框架解压后的目录。
3.在您的数据库中创建一个新数据库,并导入ThinkPHP3框架提供的数据库文件。
4.修改App/Conf/config.php文件,配置数据库连接信息和其他相关参数。
2.3 目录结构├─App 应用目录│ ├─Common 公共函数目录│ ├─Conf 配置文件目录│ ├─Lan g 语言包目录│ ├─Lib 扩展类库目录│ ├─Runtime 运行时目录(需要可写权限)│ └─Tpl 模板文件目录├─ThinkPHP 框架核心目录├─Public 公共资源目录(js、css、images等)└─index.php 入口文件3. 路由配置ThinkPHP3支持灵活的URL路由配置,可以通过修改App/Conf/config.php中的URL_ROUTER_ON参数来开启路由功能。
在路由配置中,可以定义URL与控制器/方法之间的映射关系。
3.1 基本路由规则•默认路由规则:/:控制器/:方法•完全匹配规则:/模块/控制器/方法3.2 路由参数配置// 配置路由参数'URL_ROUTER_RULES' => array('user/:id' => 'User/getUser','product/:id\d' => 'Product/getProduct',),上述代码中,我们定义了两个路由规则。
ThinkPHP 3.0 功能特性和更新说明ThinkPHP新版特性概述:全新的CBD(核心+行为+驱动)架构模式,打造DIY框架和类AOP编程体验;全新改进的项目编译机制,更快更方便,并且支持编译文件直接作为入口载入,并且支持常量外部载入,利于产品发布;调试模式更易用,可以设置不同的项目状态并自动加载对应不同的项目配置文件,并且详细记录行为执行日志;路由的增强更加灵活支持新的规则路由,改进正则路由,并改进定义方式;内部导入机制和自动加载机制优化全面提升import A D R等方法的性能;URL模式简化,兼容URL地址优先判断;查询语言进一步增强,query和execute方法增强支持连贯操作和SQL解析;模板引擎性能提升,PHP语法检测,include用法改进支持变量传输;全新的布局模板实现,支持布局嵌套;实现了扩展和驱动的完全分离,并且驱动集中管理;AJAX返回数据支持扩展,提供更好的AJAX支持;更强大和易用的模式扩展;U函数重新设计;去除Think基类设计,Think重新设计为入口类和静态类;增加MongoDb支持;增加REST模式,提供RESTFul支持;增加SAE模式扩展提供新浪SAE部署和本地调试支持;增加自动验证规则;动态配置文件和函数文件支持;ThinkPHP 3.0 更新说明[入口文件和编译][新增] 调试模式增加不同的应用状态自动加载不同的项目配置文件[新增] 入口文件增加RUNTIME_FILE常量定义[调整] THINK_PATH 和APP_PATH 常量定义最后必须是/ 结束[调整] 调试模式设置改为在入口文件中使用APP_DEBUG常量[调整] 默认调试模式配置调整默认情况下不开启运行信息和页面Trace信息[改进] 部署模式和原ALLINONE模式合并最终只生成一个项目编译缓存文件[改进] runtime自动生成和目录检测优化[改进] 核心编译生成文件支持常量分离到单独的文件外部加载[改进] CORE_PATH TMPL_PATH HTML_PATH EXTEND_PATH MODE_PATH VENDOR_PATH常量可以在入口重新定义[改进] 部署编译生成新的入口文件可以用于替换入口[改进] 支持自定义编译缓存文件名可以在入口文件增加常量RUNTIME_FILE 默认位置不变[改进] 调试模式切换删除编译缓存便于调试后直接切换到部署模式[删除] 废除入口文件中的APP_CACHE_NAME、NO_CACHE_RUNTIME、RUNTIME_ALLINONE、STRIP_RUNTIME_SPACE常量定义[删除] 去掉入口文件中的App::run() 代码[配置]新版的惯例配置中去掉了行为才需要使用的配置项部分惯例配置参数移动到行为扩展中所以我们建议[新增] 增加APP_STATUS 参数用于调试模式下面设置不同的应用状态自动加载不同的项目配置文件[新增] 增加TMPL_LAYOUT_ITEM 参数,用于配置布局内容替换标识默认是{__CONTENT__}[新增] 增加LOAD_EXT_FILE和LOAD_EXT_CONFIG参数,用于动态加载外部文件和配置文件[新增] 增加APP_TAGS_ON参数用于设置是否开启系统行为扩展,默认开启[新增] 新增DB_SQL_BUILD_CACHE和DB_SQL_BUILD_LENGTH 参数用于sql缓存[新增] 增加DB_MASTER_NUM参数用于设置主(写)服务器数量[新增] 增加MEMCACHE_HOST和MEMCACHE_PORT配置[新增] 增加LANG_LIST参数,用于设置允许切换的语言列表,用逗号分隔[新增] 增加TMPL_DENY_PHP参数,用于设置模板是否禁用PHP代码[新增] 增加DEFAULT_FILTER参数,用于设置默认的参数过滤方法[新增] 增加VAR_SESSION_ID参数,用户可以指定session_id[新增] 增加SHOW_LOAD_FILE 参数,用于控制是否显示加载文件数[新增] 增加TOKEN_RESET参数,用于设置令牌错误后是否重置默认为true[新增] 惯例配置添加APP_SUB_DOMAIN_RULES和APP_SUB_DOMAIN_DENY 默认设置[调整] 当前模板主题名配置TEMPLATE_NAME更改为THEME_NAME[调整] 当前扩展名称的定义THINK_MODE 更改为MODE_NAME[调整] APP_CONFIG_LIST配置参数改为字符串方式,用逗号分隔[调整] LOG_RECORD_LEVEL 配置参数改为字符串方式,用逗号分隔[调整] 数据库端口设置DB_PORT默认为空[调整] TMPL_ACTION_ERROR和TMPL_ACTION_SUCCESS默认采用内置的错误提示模板[调整] TMPL_STRIP_SPACE 默认为true[调整] APP_AUTOLOAD_PATH参数设置最后不需要加. 例如ORG.Util 原先为ORG.Util.[删除] 删除原调试模式配置参数APP_DEBUG 改为常量定义[删除] 删除APP_GROUP_DEPR 参数[删除] 删除APP_CONFIG_LIST 参数[删除] 删除APP_PLUGIN_ON参数[删除] 删除APP_AUTOLOAD_REG参数[删除] 删除APP_DOMAIN_DEPLOY参数只需要设置APP_NAME 为空即可[删除] 删除URL_PATHINFO_MODEL参数只保留原来的智能模式[删除] 惯例配置中去掉VAR_PAGE定义[删除] 取消模块配置文件[删除] 取消taglibs.php(标签库定义) 标签库会自动加载[删除] 取消modules.php(扩展模块), actions.php(扩展操作)[控制器][新增] 增加_get _post _put _request _session _cookie _server _globals方法并支持参数过滤和默认值,例如:$this->_post('name','h'); 等效于h($_POST['name']); $this->_get('id','intval',0); 等效于intval($_GET['id']) 如果没有传入过滤方法则采用惯例配置默认配置的方法由DEFAULT_FILTER设置(默认为htmlspecialchars)因此$this->post('name'); 等效于htmlspecialchars($_POST['name']);[新增] 增加__hack_module 方法支持[新增] 增加规则路由支持[新增] 增加全新的静态缓存机制,无需定义任何静态缓存规则[新增] 增加$_GET[1] $_GET[2]用法支持[修正] 修正Action类的display方法配置TMPL_CONTENT_TYPE参数无效的bug [修正] 修正分组模块不存在自动加载上层模块的bug[改进] 完善正则路由支持[改进] U函数支持路由定义例如U('/cate/3') 以/开头的地址定义表示是路由不再解析为模块和操作[改进] 模块和操作不存在发送404状态信息[改进] 改进兼容模式的判断优先判断兼容模式URL[改进] 分组目录的Action类也支持自动加载并且优先[改进] A方法格式调整为: [项目://][分组/]模块[改进] R方法格式为:[项目://][分组/]模块/操作[改进] 增加一个P_ACTION_NAME 常量定义用于获取实际的操作名称(区分大小写)便于空操作使用[改进] 改进U函数用法格式统一为:U('[分组/模块/操作][?参数]','参数','伪静态后缀','是否跳转','显示域名')[改进] 扩展ajax返回数据, 可以在Action文件中定义ajaxAssign方法来扩展ajax返回数据。
(原创实用版4篇)编制人:_______________审核人:_______________审批人:_______________单位:_______________时间:____年___月___日序言以下是本店铺编写的4篇《thinkphp save方法》,供大家参考借鉴。
下载后,可根据实际需要进行调整和使用,希望可以帮助到有需要的朋友。
(4篇)《thinkphp save方法》篇1ThinkPHP 中的 save() 方法是一个通用的方法,可以用于保存数据到数据库表中。
无论使用的是哪种数据库,都可以使用这个方法来进行数据的保存。
在使用 save() 方法时,需要先获取数据表的实例,然后调用 save() 方法,并将需要保存的数据作为参数传递给方法。
具体来说,使用 save() 方法的步骤如下:1. 获取数据表的实例。
可以使用 ThinkPHP 提供的数据库连接池来获取数据表的实例。
例如,可以使用$db->table("table_name") 方法来获取数据表的实例,其中"table_name"是数据表的名称。
2. 调用 save() 方法,并将需要保存的数据作为参数传递给方法。
可以使用数组或者对象来传递数据。
例如,可以使用$data["field_name"] = "value"的方式来传递数据,其中"field_name"是数据表中的字段名,"value"是需要保存的值。
3. 执行 save() 方法,并将返回值存储在一个变量中。
例如,可以使用$result = $db->table("table_name")->save($data) 方法来执行 save() 方法,并将返回值存储在$result 变量中。
4. 判断 save() 方法的执行结果。
XXX利用PHPExcel导入excel表格数据到数据库使用thinkPHP和PHPExcel将Excel表格数据导入数据库首先,我们需要下载PHPExcel包,并将其放入thinkPHP文件夹中。
这个包包括两个文件:XXX和XXXphp。
我们可以新建一个名为PHPExcel的文件夹,将这两个文件放入其中,然后将整个文件夹放入thinkPHP核心包中,路径为C:\Users\Administrator\\你的项目\XXX。
接下来,我们需要创建前端界面代码。
可以使用以下代码:div style="margin-left: 100px;: -33px;">form n="{:U('upload')}" enctype="XXX-data" method="post"。
input type="file" name="photo" />input type="submit" value="导入数据" style="background-color: #337AB7;color: white;">div>最后,我们需要编写后台代码。
可以使用以下代码:n upload() {if (!empty($_FILES)) {config = array(exts' =。
array('xlsx'。
'xls')。
maxSize' =。
xxxxxxx。
rootPath' =。
"./Public/"。
savePath' =。
'Uploads/'。
subName' =。
array('date'。
ThinkPHP中连接mysql数据库的四种实用和通用的连接方法ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库适配器来处理。
目前的数据库包括Mysql、MsSQL、PgSQL、Sqlite、Oracle、Ibase以及PDO的支持,如果应用需要使用数据库,必须配置数据库连接信息,数据库的配置文件有多种定义方式:第一种在项目配置文件里面定义在项目的配置文件Config/config.php 文件里,增加以下数据库配置选项即可达到数据库连接目的:PHP Code复制内容到剪贴板1.return array(2.‘DB_TYPE’=>‘mysql’,3.‘DB_HOST’=>‘localhost’,4.‘DB_NAME’=>’thinkphp’,5.‘DB_USER’=>’root’,6.‘DB_PWD’=>”,7.‘DB_PORT’=>’3306′,8.‘DB_PREFIX’=>’think_’,9.// 其他项目配置参数………10.);系统推荐使用该种方式,因为一般一个项目的数据库访问配置是相同的。
该方法系统在连接数据库的时候会自动获取,无需手动连接。
可以对每个项目定义不同的数据库连接信息,还可以在调试配置文件(Conf/debug.php)里面定义调试数据库的配置信息,如果在项目配置文件和调试模式配置文件里面同时定义了数据库连接信息,那么在调试模式下面后者生效,部署模式下面前者生效。
第二种使用DSN方式在初始化Db类的时候传参数使用这种时,it动力提醒大家,可以把后面的dns做为配置文件,这样方便统一修改;PHP Code复制内容到剪贴板1.$db_dsn = “mysql://username:passwd@localhost:3306/ DbName”;2.$db = new Db($db_dsn);该方式主要用于在控制器里面自己手动连接数据库的情况,或者用于创建多个数据库连接。
thinkPHP 利用PHPExcel导入excel表格数据到数据库一、下载PHPExcel包,并放在thinkPHP文件中PHPExcel包:新建文件夹,命名为PHPExcel,将上面两个文件PHPExcel,PHPExcel.php放到我们新建的PHPExcel文件夹下面;然后将此文件夹放在thinkPHP核心包里面,路径如下:C:\Users\Administrator\Desktop\你的项目\ThinkPHP\Library\Vendor二、前端界面代码前端界面:<div style="margin-left: 100px;margin-top: -33px;"><form action="{:U('upload')}" enctype="multipart/form-data" method="post" ><input type="file" name="photo" /><input type="submit" value="导入数据" style="background-color: #337AB7;color: white;"> </form></div>三、后台代码:function upload() {if (!empty($_FILES)) {$config = array('exts' => array('xlsx', 'xls'),'maxSize' => 3145728,'rootPath' => "./Public/",'savePath' => 'Uploads/','subName' => array('date', 'Ymd'),);$upload = new \Think\Upload($config);if (!$info = $upload->upload()) {$this->error($upload->getError());}vendor("PHPExcel.PHPExcel");$file_name=$upload->rootPath.$info['photo']['savepath'].$info['photo']['savename'];$extension = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));//判断导入表格后缀格式if ($extension == 'xlsx') {$objReader = \PHPExcel_IOFactory::createReader('Excel2007');$objPHPExcel = $objReader->load($file_name, $encode = 'utf-8');} else if ($extension == 'xls') {$objReader = \PHPExcel_IOFactory::createReader('Excel5');$objPHPExcel = $objReader->load($file_name, $encode = 'utf-8');}$sheet = $objPHPExcel->getSheet(0);$highestRow = $sheet->getHighestRow(); // 取得总行数$highestColumn = $sheet->getHighestColumn(); // 取得总列数for ($i = 2; $i <= $highestRow; $i++) {$data['product_id'] = $objPHPExcel->getActiveSheet()->getCell("A" . $i)->getValue();$data['title'] = $objPHPExcel->getActiveSheet()->getCell("B" . $i)->getValue();$data['img_url'] = $objPHPExcel->getActiveSheet()->getCell("C" . $i)->getValue();$data['price'] = $objPHPExcel->getActiveSheet()->getCell("D" . $i)->getValue();$data['product_url'] = $objPHPExcel->getActiveSheet()->getCell("E" . $i)->getValue();$data['long_url'] = $objPHPExcel->getActiveSheet()->getCell("F" . $i)->getValue();$data['input_time'] = time();$data['promotion_type'] = mt_rand(3, 5);M('product')->add($data);}$this->success('导入成功!');} else {$this->error("请选择上传的文件");}}。
PHP上传图片代码保存到数据库Html代码:up_logo.html静态页面上传的图片,点击“保存”后跳转到“test.php”。
<form name="theForm" method="post" action="test.php"><table width="100%"><tr><td style="width:30%"> <input type="file" name="file_logo" /></td></tr><tr><td align="center"><input type="submit" value="保存" class="button2" /> <input type="reset" value="重置" class="button2" /></td></tr></table></form>Php代码:test.phpif (!empty($_FILES["file_logo"]["name"])) { //提取文件域内容名称,并判断$path="images/logo/"; //上传路径(可以自行修改)if(!file_exists($path)){//检查是否有该文件夹,如果没有就创建,并给予最高权限mkdir("$path", 0700);}//允许上传的文件格式$tp = array("image/gif","image/pjpeg","image/jpeg","image/png");//检查上传文件是否在允许上传的类型if(!in_array($_FILES["file_logo"]["type"],$tp)){echo "<script>alert('格式不对');history.go(-1);</script>";exit;}//END IF$filetype = $_FILES['file_logo']['type'];if($filetype == 'image/jpeg'){$type = '.jpg';}if ($filetype == 'image/jpg') {$type = '.jpg';}if ($filetype == 'image/pjpeg') {$type = '.jpg';}if($filetype == 'image/gif'){$type = '.gif';}if($filetype == 'image/png'){$type = '.png';}if($_FILES["file_logo"]["name"]){$today=date("YmdHis"); //获取时间并赋值给变量$file2 = $path.$today.$type; //图片的完整路径$img = $today.$type; //图片名称$flag=1;}//END IFif($flag) {$result=move_uploaded_file($_FILES["file_logo"]["tmp_name"],$file2);}//特别注意这里传递给move_uploaded_file的第一个参数为上传到服务器上的临时文件}//这里就可以写sql的语句插入到数据库中Ps:插入图片路径为$file2。
PHP保存数组到数据库数组是 PHP 开发中使⽤最多的数据类型之⼀,对于结构化的数据尤为重要。
很多时候我们需要把数组保存到数据库中,实现对结构化数据的直接存储和读取。
其中⼀个案例就是,对于 Form 提交的多选 checkbox 数据,PHP后端就收到的数据就是⼀个数组,⽽且有可能还是多维数组。
例如,如下⼀个员⼯数组:$staff = array(array("name" => "洪七", "number" => "101", "sex" => "男", "job" => "总经理", "mobile" => array("01234567890", "9876543210")),array("name" => "郭靖", "number" => "102", "sex" => "男", "job" => "开发⼯程师"),array("name" => "黄蓉", "number" => "103", "sex" => "⼥", "job" => "产品经理"),);对于这样的数据,MySQL数据库是⽆法直接写⼊的,那么有什么办法呢?有,但是需要稍微转换⼀下,不过也很简单。
就是使⽤PHP⾃带的serialize()或者json_encode()函数序列化数据成字符串:// 写⼊数据库之前$staff_serialize = serialize($staff); // 序列化成字符串$staff_json = json_encode($staff); // JSON编码数组成字符串// 读取数据库后$staff_restore = unserialize($staff_serialize); // 反序列化成数组$staff_dejson = json_decode($staff_json, true); // JSON解码成数组之后从数据库⾥⾯读出来的数据还是字符串格式的,⽤unserialize()和json_decode()函数转换成数组就可以了。
php如何把表单内容提交到数据库⼀般朋友们逛⼀些⽹站的时候,想使⽤⽹站或者看到更多⽹站⾥的内容,⽹站会要求⽤户进⾏新⽤户的注册,⽹站会把新⽤户的注册信息存⼊数据库中,需要的时候再进⾏提取。
这样⽹站就会⾸先创建⾃⼰的数据库和对应的表,我们这⾥使⽤php创建⼀个简单的数据库和表,使⽤phpMyAdmin来创建MySql数据库和表。
例如创建⼀个test数据库,其⽰例的代码如下所⽰:<?php// 创建连接$conn = new mysqli("localhost", "uesename", "password");// 检测连接if ($conn->connect_error){die("连接失败: " . $conn->connect_error);}// 创建数据库$sql = "CREATE DATABASE test";if ($conn->query($sql) === TRUE){echo "数据库创建成功";} else {echo "Error creating database: " . $conn->error;}$conn->close();>然后使⽤CREATE TABLE 语句⽤于创建 MySQL 表,设置如下⼏个字段。
id : 它是唯⼀的,类型为 int ,并选择主键。
uesrname : ⽤户名,类型为 varchar,长度为30。
password : 密码,类型为 varchar,长度为30。
confirm:确认密码,类型为 varchar,长度为30。
email : 邮箱,类型为 varchar,长度为30。
接着使⽤sql语句来创建数据库表,其代码显⽰如下:<?php// 创建连接$conn = new mysqli("localhost", "uesename", "password","test");// 检测连接if ($conn->connect_error){die("连接失败: " . $conn->connect_error);}// 使⽤ sql 创建数据表$sql = "CREATE TABLE login (id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY,username VARCHAR(30) NOT NULL,password VARCHAR(30) NOT NULL,confirm VARCHAR(30) NOT NULL,email VARCHAR(30) NOT NULL,)ENGINE=InnoDB DEFAULT CHARSET=utf8 ";if ($conn->query($sql) === TRUE){echo "Table MyGuests created successfully";} else {echo "创建数据表错误: " . $conn->error;}$conn->close();>上⾯我们创建好了数据库和表,下⾯建⽴⼀个简单的表单注册的前端页⾯,这⾥的表单页⾯很简单,⽤户名,密码,密码确认,注册邮箱等等⼏个简单的⽂本框。
thinkphp3.0中模板保存到数据库path模板引擎fileexceptioncachelayout在开发cms的时候用到如果将模板文件存入到数据库并显示到页面中由于thinkphp3.0都是直接从模板文件中读取再解析的那么对于模板存入数据库中就只有自己开发了,还有thinkphp3.0中有mode的功能我们可以定义自己的mode这样就可以达到目的了,那么如何来扩展自己的mode呢?如下:1.在你的入口文件中输入define('MODE_NAME','Ey');其中"Ey"就是你自己扩展的mode名称了,请在你的thinkphp/Extend/Mode文件下面创建Ey 文件夹2.在Ey目录中修改添加tags.php文件内容如下:return array('app_init'=>array(),'app_begin'=>array('ReadHtmlCache', // 读取静态缓存),'route_check'=>array('CheckRoute', // 路由检测),'app_end'=>array(),'path_info'=>array(),'action_begin'=>array(),'action_end'=>array(),'view_begin'=>array(),'view_template'=>array('ExtensionTemplate', // 自动定位模板文件(手动添加)),'view_content'=>array('ParseContent'//(手动添加)),'view_filter'=>array('ContentReplace', // 模板输出替换'TokenBuild', // 表单令牌'WriteHtmlCache', // 写入静态缓存'ShowRuntime', // 运行时间显示),'view_end'=>array('ShowPageTrace', // 页面Trace显示),);该文件中后面的注释中添加手动添加了为我的修改,只是修改thinkphp中默认的tags中查找模板和解析模板的行为将系统默认的action和view类复制到Ey的目录中(由于解析内容,所以要修改action和view类),修改action.class.php中的fetch方法:protected function fetch($templateFile='',$templateContent='' ) {return $this->view->fetch($templateFile,$templateContent);}view.class.php文件中的修改为:public function fetch($templateFile='',$templateContent = NULL) {$params['templateFile'] = $templateFile;$params['cacheFlag'] = true;if(isset($templateContent)) {$params['templateContent'] = $templateContent;}tag('view_template',$params);// 页面缓存ob_start();ob_implicit_flush(0);if('php' == strtolower(C('TMPL_ENGINE_TYPE'))) { // 使用PHP原生模板// 模板阵列变量分解成为独立变量extract($this->tVar, EXTR_OVERWRITE);// 直接载入PHP模板include $templateFile;}else{// 视图解析标签$params = array('var'=>$this->tVar,'content'=>$params['templateContent'],'file'=>$params[ 'templateFile'],'cacheFlag'=>$params['cacheFlag']);tag('view_content',$params);}// 获取并清空缓存$content = ob_get_clean();// 内容过滤标签tag('view_filter',$content);// 输出模板文件return $content;}3.扩展自己的查找模板的类(自己扩展的行为tp让我们放在thinkphp\Extend\Behavior中) 在thinkphp\Extend\Behavior中添加ExtensionTemplateBehavior.class.php类,内容如下:class ExtensionTemplateBehavior extends Behavior {// 行为扩展的执行入口必须是runpublic function run(&$params){if( is_array($params) ){if( array_key_exists('templateFile', $params) ){$params = $this->parseTemplateFile($params);}else{//异常throw_exception(L('_TEMPLATE_NOT_EXIST_AND_CONTENT_NULL_').'['.$params['tem plateFile'].']');}}else{// 自动定位模板文件if(!file_exists_case($params))$params = $this->parseTemplateFile($params);}}private function parseTemplateFile($params) {if( is_array($params) ) {$templateFile = $params['templateFile'];}else{$templateFile = $params;}if(!isset($params['templateContent'])) { // 是否设置 templateContent 参数//自动获取模板文件if('' == $templateFile){// 如果模板文件名为空按照默认规则定位$templateFile = C('TEMPLATE_NAME');} elseif(false === strpos($templateFile,C('TMPL_TEMPLATE_SUFFIX'))) { $path = explode(':',$templateFile);//如果是插件if($path[0] == 'Ext') {$templateFile = str_replace(array('Ext:',$path[1] . ':',$path[2] . ':'),'',$templateFile);$templateFile = SITE_ROOT . '/Ext/extensions/' . strtolower($path[1]) . '/' . $path[2] . '/Tpl/' . $templateFile .C('TMPL_TEMPLATE_SUFFIX');} else {// 解析规则为模板主题:模块:操作不支持跨项目和跨分组调用$action = array_pop($path);$module = !empty($path)?array_pop($path):MODULE_NAME;if(!empty($path)) {// 设置模板主题$path = dirname(THEME_PATH).'/'.array_pop($path).'/';}else{$path = THEME_PATH;}$depr = defined('GROUP_NAME')?C('TMPL_FILE_DEPR'):'/';$templateFile = $path.$module.$depr.$action.C('TMPL_TEMPLATE_SUFFIX');}}} else {if('' == $templateFile){$depr = defined('GROUP_NAME')?C('TMPL_FILE_DEPR'):'/';$params['cacheFlag'] = false;} else {$path = explode(':',$templateFile);//如果是插件if($path[0] == 'Ext') {$templateFile = str_replace(array('Ext:',$path[1] . ':',$path[2] . ':'),'',$templateFile);$templateFile = SITE_ROOT . '/Ext/extensions/' . strtolower($path[1]) . '/' . $path[2] . '/Tpl/' . $templateFile .C('TMPL_TEMPLATE_SUFFIX');} else {// 解析规则为模板主题:模块:操作不支持跨项目和跨分组调用$action = array_pop($path);$module = !empty($path)?array_pop($path):MODULE_NAME;if(!empty($path)) {// 设置模板主题$path = dirname(THEME_PATH).'/'.array_pop($path).'/';}else{$path = THEME_PATH;}$depr = defined('GROUP_NAME')?C('TMPL_FILE_DEPR'):'/';$templateFile = $path.$module.$depr.$action.C('TMPL_TEMPLATE_SUFFIX');}}}if( is_array($params) ){$params['templateFile'] = $templateFile;return $params;}else{if(!file_exists_case($templateFile))throw_exception(L('_TEMPLATE_NOT_EXIST_').'['.$templateFile.']');return $templateFile;}}4.添加解析自己的模板的行为类(这个和thinkphp3.0默认的ParseTemplateBehavior.class.php类似)class ParseContentBehavior extends Behavior {protected $options = array(// 布局设置'TMPL_ENGINE_TYPE' => 'Ey', // 默认模板引擎以下设置仅对使用Ey 模板引擎有效'TMPL_CACHFILE_SUFFIX' => '.php', // 默认模板缓存后缀'TMPL_DENY_FUNC_LIST' => 'echo,exit', // 模板引擎禁用函数'TMPL_DENY_PHP' =>false, // 默认模板引擎是否禁用PHP原生代码'TMPL_L_DELIM' => '{', // 模板引擎普通标签开始标记'TMPL_R_DELIM' => '}', // 模板引擎普通标签结束标记'TMPL_VAR_IDENTIFY' => 'array', // 模板变量识别。