`
sinykk
  • 浏览: 356926 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

thinkphp 常见问题及 使用总结

    博客分类:
  • php
阅读更多

=================   总结    =================

 

ThinkPHP中的BUG及技巧与策:
1. 模板中不能使用的标签
{$content} {$i}
2. If标签
如:
试验后总是有想不到的错误, 这样,还不如直接用php
if(…){ …?>来得块些呢.

约定:
1.所有类库文件必须使用.class.php作为文件后缀,并且类名和文件名保持一致
2.控制器的类名以Action为后缀
3.模型的类名以Model为后缀,类名第一个字母须大写
4.数据库表名全部采用小写,

如:
数据表名: 前缀_表名
模型类名: 表名Model 注:这里的表名第一个字母要大写
创建对象: D(‘表名’) 注:这里的表名第一个字母要大写

定义控制器类
class IndexAction extends Action{
public function show(){
echo ‘这是新的 show 操作’;
}
}
然后在浏览器里面输入

http://localhost/myApp/index.php/Index/show/

定义模型类:
class 表名Model extends Model{
[//手动定义字段[可选]
protected $fields = array(
‘id’,
‘username’,
‘email’,
‘age’,
‘_pk’=>’id’, //主键
‘_autoInc’=>true //是否自增
)
]
}

记录的修改:
$User = D(“User”) // 实例化 User 对象
$User->find(1) // 查找 id 为 1 的记录
$User->name = ‘ThinkPHP’ // 把查找到的记录的名称字段修改为 ThinkPHP
$User->save() // 保存修改的数据
更新特定字段的值
$User->setField(‘name’,'TopThink’,'id=1′)
同样可以支持对字段的操作
$User->setField(‘score’,'(score+1)’,'id=1′)

新建记录,方法1:
$User = new UserModel() //实例化 User 对象
$User->字段名 = 字段值 //给字段赋值
$User->add() //添加记录
新建记录,方法2:
$data['字段名'] = 字段值; //给字段赋值
$User = D(‘User’); //实例化 User 对象
$User->add($data); //$insertId,Add 方法的返回值就是最新操る的主键值,可以直接猎取。
新增多条记录:
$User = new UserModel()
$data[0]['name'] = ‘ThinkPHP’
$data[0]['email'] =
$data[1]['name'] = ‘流年’
$data[1]['email'] =
$User>addAll($data)

删除记录
$User->find(2)
$User->delete() // 删除查找到的记录
$User->delete(’5,6′) // 删除主键为 5、6 的数据
$User->deleteAll() // 删除查询出来的所有数据

记录查询

$User->getDbFields() //猎取当前数据字段
$User->findAll(); //查找所有记录
$User->findAll(’1,3,8′) //查询主键为1,3,8的记录集
$User->count() // 猎取记录数
$User->max(‘score’) // 猎取用户的最大积分
$User->min(‘score’,'score>0′) // 猎取积分大于 0 的用户的最小积分
$User->avg(‘字段名’) // 猎取所有记录的字段值的平均值
$User->sum(‘字段名’) // 统计字段值
$User->getN(2,’score>80′,’score desc’) // 返回符合条件的第 2 条记录
$User->getN(2,’score>80′,’score desc’) //还可以猎取最后第二条记录
$User->first(‘score>80′,’score desc’) //如果要查询第一条记录,还可以使用
$User->last(‘score>80′,’score desc’) // 猎取最后一条记录
$User->top(5,”,’score desc’) // 猎取积分最高的前 5 条记录
$User->getBy(‘name’,'liu21st’) //跟据字段的字段值来查询记录

$Model = new Model() // 实例化一个 model 对象 没有对应任何数据表
$Model->query(“select * from think_user where status=1″)

$objrs = $Model->query(“select * from think_user where status=1″) //自定义查询
$Model->execute(“update think_user set name=’thinkPHP’ where status=1″) //用于更新和写入数据的 sql 操作,返回影响的记录数

$User->startTrans() // 启动事务
$User->commit() // 提交事务
$User->rollback() // 事务回滚

模板:

$this->assign(‘name’,$value); //在 Action 类里面使用 assign 方法对模板变量赋值,无论何种变量类型都统一使用 assign 赋值

$this->display() // 输出模版文件

批量赋值
$array['name'] = ‘thinkphp’
$array['email'] =
$array['phone'] = ”
$this->assign($array)

$this->display() // 调用 User 模块的 read 操作模版
$this->display(‘edit’) // 调用 User 模块的 edit 操作模版
$this->display(‘Member:read’) // 调用 Member 模块的 read 操作模版
$this->display() // 调用 Xp 主题的 User 模块的 edit 操作模版
$this->display(‘../Member/read.html’) // 直接指定模版文件的全名

模板标签:

{ } 或 {// 注释内容 } //模板注释
{$user['name']} //输出数组变量
{$user:name} //输出对象的属性

为了方便模板定义,无论输出的模板变量是数组还是对象,都可以用下列统一方式输出:
{$user.name}
如果是多维数组或者多层对象属性的输出,请使用下面的定义方式:
{$user['sub']['name']}
{$user:sub:name}

使用函数:
格式:{$varname|function1|function2=arg1,arg2,### }
说明:
{ 和 $ 符号之间不能有空格 ,后面参数的空格就没有问题
###表示模板变量本身的参数位置

细叱变量
{$Think.server.script_name } //取得$_SERVER 变量
{$Think.session.session_id|md5 } // 猎取$_SESSION 变量
{$Think.get.pageNumber } //猎取$_GET 变量
{$Think.cookie.name } //猎取$_COOKIE 变量
系统常量
{$Think.const.__FILE__ }
{$Think.const.MODULE_NAME }
特殊变量 ,由 ThinkPHP 系统定义的常量
{$Think.version } //版本
{$Think.now } //现在时间

块捷输出
{:function(…)} //执行方法并输出返回值
{~function} //执行方法不输出
} //输出 Session 变量
{&var} //输出配置参数
{%var} //输出语言变量
{.var} //输出 GET 变量
{^var} //输出 POST 变量
{*var} //输出常量

包含外部文件
// 用变量控制要导入的模版
// 使用一个完正的文件名包含

循环输出
iterate 还有其它的别名,包括 volist,resultset,sublist

模版赋值:
$User = D(‘User’)
$list = $User->findAll()
$this->assign(‘list’,$list)

模版定义:

{$vo.name}

注意 name 和 id 表示的含义
// 输出 list 的第 5~15 条记录

{$vo.name}

// 输出偶数记录

{$vo.name}

// 输出 key

{$k}.{$vo.name}

//子循环输出

{$sub.name}

Switch 标签

value1
value2
default

其中 name 属性可以使用函数以及细叱变量,例如:

admin
default

也可以对 case 的 value 属性使用变量,例如:

admin
member
default

ThinkPHP中FCKeditor编辑器的使用

前段时间一直为TP寻找好用的在线编辑器而苦恼,经过多次尝试与修改后,终于成功地将编辑器集成到Thinkphp里面。而且可以用直接上传和ajax两种方式处理内容。为了给一些还没能成功地集成fckeditor的同侪们一些启发与帮助,兹将我的经验与体会描述如下:
应用目的:将FCKeditor编辑器集成到Thinkphp中,使用户能够在线像编辑Word一样处理即将发表的文字与图像。
应用软件与环境:apache服务器2.0以上版本,PHP版本5.0以上,mysql5.0以上;Thinkphp版本1.5或以上,Fckeditor版本2.x。
应用步骤:
1、下载FCKeditor2.x版本,将解压后的文件夹FCKeditor复制到ThinkPHP文件夹下的Vendor目录下,以便符合THinkPHP的第三方类库引入规则。
2、修改参数:
首先,用EditPlus等软件打开FCKeditor目录下的fckeditor_php5.php文件,找到第130行。出现内容如下:

public function __construct( $instanceName )

{$this->InstanceName
= $instanceName ;
$this->BasePath= ‘   ‘ ;

$this->Width
= ‘900′;

$this->Height
= ‘400′;

$this->ToolbarSet
= ‘Default’ ;

$this->Value
=   ‘  ’;
$this->Config
= array() ;

}
public function __construct( $instanceName )

{

$this->InstanceName
= $instanceName ;

$this->BasePath
= ‘/bm/ThinkPHP/Vendor/FCKeditor/’ ;

$this->Width
= ‘900′;

$this->Height
= ‘400′;

$this->ToolbarSet
= ‘Default’ ;

$this->Value
= ”;
其中,最关键的就是将Basepath设置好。里面填写的就是fckeditor_php5.php文件相对于网站文档根目录(document root)的路径。其实这就是用以表征FCKeditor编辑器相对根目录的路径。比如服务器的文档根目录最下级是htdocs/或www/,项目名为 project,project项目文件夹下有Thinkphp系统文件包与项目文件包myapp。而且服务器没有对该项目设置虚拟主机的话,此时的文档 根目录仍是www/或htdocs/,那么应该是$this->BasePath=’/project/ThinPHP/Vendor /FCKeditor/’;
若是设置了虚拟主机,即将project变为虚拟的文档根目录,通过某一域名能够直接访问网站项目的话,那么此时,
$this->BasePath=’/ThinPHP/Vendor/FCKeditor/’;
其他的参数如宽度与高度可以填或不填,若填下的话就是编辑器的默认高与宽。InstanceName是编辑器所在标签的id与name,此时不用理会。其他参数也不用理会。
其次,在FCKeditor\editor\filemanager\connectors\php\下面找到config.php文件,打开它,找到30与34行。需要改写的参数如下:$Config['Enabled'] = true ;
$Config['UserFilesPath'] = ‘    ’ ;
其中,第一个参数应该设为true.默认是true.第二个参数填写的是上传文件的路径,比如要显示的图片等。我们在project目录下建立一个 uploads文件夹,那么$Config['UserFilesPath'] = ‘ /project/uploads/   ‘;路径规则与上一个basepath一样。要是project是虚拟文档根目录的话,那么$Config['UserFilesPath'] = ‘ /uploads/   ‘;
3、应用程序:
比如在myapp项目中Lib目录下IndexAction.class.php控制器类中的index方法中,当访问该程序时,输出的模板网页里有 form表单,要求用户输入一篇文章,那么就可以用到编辑器.代码示例如下,只显示与fckeditor有关的代码,其他代码会略。
首先是服务器程序:
public function index()
{……//其他代码
vendor(”FCKeditor.fckeditor”);//包含FCKeditor类库,TP引入第三方类库的系统方法,其路径是相对于vendor目录来说的。
$editor= new FCKeditor();   //实例化FCKeditor对象
$editor->Width=’980′;//设置编辑器实际需要的宽度。此项省略的话,会使用默认的宽度。
$editor->Height=’400′;//设置编辑器实际需要的高度。此项省略的话,会使用默认的高度。
$this->Value=”;//设置编辑器初始值。也可以是修改数据时的设定值。可以置空。
$editor->InstanceName=’comment’;//设置编辑器所在表单内输入标签的id与name,即<input& amp; gt;标签的id与name。此处假            //设为comment.此处不可省,也要保持唯一性。表单上传到服务器处理程序后,即可通过$_POST['comment']来读取。
$html=$editor->Createhtml();//创建在线编辑器html代码字符串,并赋值给字符串变量$html.
$this->assign(’html’,$html);//将$html的值赋给模板变量$html.在模板里通过{$html}可以直接引用。
…….//其他代码,包括输出模板。
}
其次是对应的html模板即index 文件。只需要在需要的地方插入编辑器即可,其他代码与一般的<form>写法一样。
…….<!–其他html代码     –>
<div>
<form id=”commentform” name=”commentform” action=””>//action里填写表单处理程序,如’__APP__/Index/check’。  指的是IndexAction类下的check()方法来处理提交的表单数据。
<table style=”width:100%;”>
<tr>
<td style=”text-align:left;”>添加新评论:
</td>
</tr>
……//其他表单填写项
<tr>
<td > {$html}</td>
</tr>
<tr>
<td><input type=”submit” value=”提交评论” >
</td>
</tr>
</table>
</form>
</div>
到这里, 已经可以用了。在表单处理程序里像通常处理表单元素那样就行。但是,有的时候项目移植后,上传的图片等链接路径会被错误编译,以致不能正确显示图片等东 西。通常是双引号解析错误,我还没有解决。要想不出错的话,可以采取ajax的方式处理表单数据。不过在进行ajax处理之前,要先用一段js代码将编辑 器中的值赋给表单中 name是instacename的值的表单元素。比如,本项示例中要用ajax对表单进行处理的话,index模板文件中必须在表单处理前运行的一段 js代码为:
…….//其他js代码
var  editor=FCKeditorAPI.GetInstance(’comment’);//comment是设置的instanceName值.
document.commentform.comment.value=editor.EditorDocument.body.innerHTML; //将编辑器中内容处理后的源代 码                                                                                                               //赋值给commentform表单的comment 属性元素值。
……//其他js代码
注:个人认为xajax比较不错,只需要将主要精力花在后台程序上。我也是用xajax进行数据处理的。前台代码很简单。

分享到:
评论

相关推荐

    ThinkPhp单字母快速方法总结

    通过以上总结,我们可以看到ThinkPHP框架提供了丰富的单字母快捷函数来简化开发过程中的常见任务,如URL组装、模型实例化、输入获取等。这些函数的使用大大提高了开发效率,并使得代码更加简洁易懂。

    130套thinkphp5网站模板源码,企业网站建设thinkphp模板,建站thinkphp源码模板网站搭建

    总结来说,这130套ThinkPHP5网站模板源码为企业网站搭建提供了丰富的选择,无论是新手还是经验丰富的开发者,都能从中受益。它们不仅体现了ThinkPHP5框架的强大功能,也是学习和实践Web开发的宝贵资源。在实际应用中...

    ThinkPHP6.0.zip

    6. **错误处理与日志**:ThinkPHP6.0增强了错误处理机制,提供了一致的异常处理,便于调试和问题定位。同时,其日志模块支持多种驱动,如文件、数据库、 syslog等,便于记录和分析运行时信息。 7. **安全防护**:...

    thinkphp5.1.39、tp5.1.39版本

    ThinkPHP5.1.39,简称tp5.1.39,是ThinkPHP框架的一个重要版本,它在原有的基础上进行了多方面的优化和改进,旨在提供更高效、稳定且易于使用的开发环境。本文将对这个版本的特性、优势以及常见应用进行详尽的探讨。...

    thinkphp5.0.rar

    4. **thinkphp.txt**:这个文件可能包含ThinkPHP5的安装步骤、基本配置示例、常见问题解答,或者是开发者在实践中总结的一些技巧和经验分享,对于初学者来说,是很好的辅助学习资料。 学习ThinkPHP5.0,你需要了解...

    thinkphp5 js中显示php变量.docx

    尝试直接使用 `{:U()}` 语法时,遇到了无法解析的问题。具体错误如文所述。 **原因分析:** 1. **外部 JS 文件加载问题**:当 JS 文件被放置在公共目录(如 `public` 文件夹下)时,这些文件在加载时不会经过框架的...

    thinkphp中文分词

    总结来说,这个"thinkphp中文分词"项目提供了一个在ThinkPHP框架内实现中文分词的解决方案。通过`dict.csv`词典文件、`SplitWord.class.php`分词类以及示例图,开发者可以学习如何在PHP环境中高效地处理中文文本,...

    基于thinkphp开发的简单的教学管理系统

    总结,基于ThinkPHP开发的教学管理系统结合了框架的高效开发能力和教育行业的具体需求,实现了用户管理、课程管理等核心功能。开发者通过掌握ThinkPHP的使用,可以快速构建出稳定、安全、易扩展的在线教学平台。无论...

    thinkPHP框架乐观锁和悲观锁实例分析

    最后,对于ThinkPHP框架有兴趣的读者,可以进一步查阅相关专题和教程,例如《ThinkPHP入门教程》、《ThinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶...

    基于thinkphp的cms系统

    总结,基于ThinkPHP的CMS系统充分利用了框架的特性,实现了高效、灵活的内容管理,通过良好的架构设计和功能实现,满足了多样化的需求。在实际开发过程中,开发者需要不断学习和实践,以适应不断变化的业务需求,...

    基于thinkPHP框架实现留言板的方法

    基于thinkPHP框架实现留言板是一个较为常见的开发实例,它能帮助开发者了解如何利用thinkPHP框架快速搭建出一个留言板系统。以下是详细知识点介绍: ### 知识点一:thinkPHP框架概述 ThinkPHP是一个轻量级的PHP开发...

    Thinkphp项目模板job

    总结来说,【ThinkPHP项目模板job】是一个快速开发的起点,具备完整的项目结构和基础配置,便于开发者在此基础上进行业务逻辑的实现和扩展。熟悉ThinkPHP的开发者可以轻松上手,快速构建自己的Web应用。同时,通过...

    用thinkphp开发的新闻发布系统,从前端到后端,全部源码!

    总结,本文详细介绍了使用ThinkPHP开发新闻发布系统的过程,包括前端界面设计、后端功能实现、数据库设计以及框架特性等。对于想学习或实践此类项目的开发者,这个源码提供了一个很好的起点。通过深入研究,不仅可以...

    thinkphp常见路径用法分析

    本文将详细介绍ThinkPHP框架中常见的路径标签及其用法,同时结合实例来加深理解。 首先,我们来认识一些ThinkPHP中经常使用的路径标签常量: 1. __PUBLIC__ __PUBLIC__标签常量代表当前项目的公共资源目录路径。在...

    thinkphp实现商城秒杀、优惠券

    总结,通过ThinkPHP构建的商城系统,结合秒杀和优惠券功能,不仅可以提升用户购物体验,还能助力商家实现营销目标。在实际开发过程中,我们需要关注性能优化、安全性以及用户体验,以打造一个稳定、高效的电商应用。

    ThinkPHP1.6.0

    3. 错误和异常处理:ThinkPHP1.6.0提供了完善的错误和异常处理机制,能够有效地捕获和处理程序运行中的问题,确保应用的稳定性和安全性。 二、核心特性 1. 模型(Model):模型层负责与数据库进行交互,提供了强大...

    thinkphp + flash上传头像剪裁预览组件

    本话题将详细介绍如何在ThinkPHP框架中结合Flash实现头像上传及剪裁预览功能。 首先,了解ThinkPHP的基本架构。ThinkPHP采用MVC(Model-View-Controller)模式,将业务逻辑、数据模型和视图分离开来,使得代码更...

    ThinkPHP3.2.3快速入门pdf

    ### ThinkPHP3.2.3快速入门知识点概览 #### 1. ThinkPHP框架简介 - **框架定位**:ThinkPHP是...通过以上知识点的总结,可以帮助初学者快速了解ThinkPHP3.2.3的基础结构和使用方法,为进一步深入学习打下坚实的基础。

    thinkphp5.0项目代码

    总结来说,这个"ThinkPHP5.0项目代码"涵盖了Web开发中的诸多关键点,包括框架应用、前端响应式设计、MVC架构、数据库操作、路由、中间件、错误处理、安全防护以及测试等。通过学习这个项目,开发者可以深入了解和...

    THINKPHP框架实例

    本实例将深入探讨ThinkPHP的核心特性和常见应用场景,帮助开发者更好地理解和运用这一强大的工具。 一、ThinkPHP框架简介 1.1 MVC架构 ThinkPHP遵循MVC架构,将业务逻辑(Model)、数据展示(View)和用户交互控制...

Global site tag (gtag.js) - Google Analytics