Home > Backend Development > PHP Tutorial > thinkphp 常见有关问题及 使用总结

thinkphp 常见有关问题及 使用总结

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-06-13 10:53:47
Original
983 people have browsed it

thinkphp 常见问题及 使用总结
    =================?? 总结 ?? =================
?
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,即$html=$editor->createhtml();//创建在线编辑器html代码字符串,并赋值给字符串变量$html.
$this->assign(’html’,$html);//将$html的值赋给模板变量$html.在模板里通过{$html}可以直接引用。
…….//其他代码,包括输出模板。
}
其次是对应的html模板即index 文件。只需要在需要的地方插入编辑器即可,其他代码与一般的

写法一样。
…….

//action里填写表单处理程序,如’__app__/index/check’。? 指的是indexaction类下的check()方法来处理提交的表单数据。




……//其他表单填写项






添加新评论:
{$html}




到这里, 已经可以用了。在表单处理程序里像通常处理表单元素那样就行。但是,有的时候项目移植后,上传的图片等链接路径会被错误编译,以致不能正确显示图片等东西。通常是双引号解析错误,我还没有解决。要想不出错的话,可以采取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进行数据处理的。前台代码很简单。
 
Related labels:
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Issues
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template