总结ThinkPHP使用技巧经验分享(二) 2013/02/26 10:43 thinkphphj 评论
上一篇 返回 下一篇
继续分享:
循环输出
volist还有别名 iterate
模版赋值:
$User = D('User')
$list = $User->findAll()
$this->assign('list',$list)
模版定义:
<iterate name="list" id="vo">
{$vo.name}
</iterate>
注意 name 和 id 表示的含义
// 输出 list 的第 5~15 条记录
<iterate name="list" id="vo" offset="5" length='10'> {$vo.name}
</iterate>
// 输出偶数记录
<iterate name="list" id="vo" mod="2" >
<eq name="mod" value="1">
{$vo.name}
</eq>
</iterate>
// 输出 key
<iterate name="list" id="vo" key="k" >
{$k}.{$vo.name}
</iterate>
//子循环输出
<volist name="list" id="vo">
<iterate name="vo['sub']" id="sub">
{$sub.name}
</iterate>
</volist>
Switch 标签
<switch name="name">
<case value="1">value1</case>
<case value="2">value2</case>
<default />default
</switch>
其中 name 属性可以使用函数以及系统变量,例如: <switch name="Think.get.userId|abs">
<case value="1">admin</case>
<default />default
</switch>
也可以对 case 的 value 属性使用变量,例如:
<switch name="userId">
<case value="$adminId">admin</case>
<case value="$memberId">member</case>
<default />default
</switch>
比较标签
<eq name="name" value="value">value</eq> // name 变量的值等于 value 就输出
<neq name="name" value="value">value</neq> // name 变量的值不等于 value 就输出 <gt name="name" value="5">value</gt> // name 变量的值大于 5 就输出
<egt name="name" value="5">value</egt> // name 变量的值大于等于 5 就输出 <lt name="name" value="5">value</lt> // name 变量的值小于 5 就输出
<elt name="name" value="5">value</elt> // name 变量的值小于等于 5 就输出
//其实上面的所有标签都是 compare 标签的别名
// 其中 type 属性的值就是上面列出的判断标签名称
<compare name="name" value="5" type="eq">value</compare> // name 变量的值等于 5 就输出
If标签
<if condition="$name eq 1 "> value1
<elseif condition="$name eq 2" />value2
<else /> value3
</if>
C操作
操作(动态)配置: 主要用于Action方法里面
获取:
C('配置参数')
设置:
C('配置参数 ',新值)
A操作
快速创建Action对象: $action = A('User'); 等效于
$action = new UserAction();
D操作
快速创建模型数据对象: $model = D('User'); 等效于
$model = new UserModel();
S操作
快速操作缓存方法
获取:
S('name')
设置:
S('name','value'); 删除:
S('name',NULL);
F操作
快速文件数据保存方法 使用方法与S操作一样
L操作
快速操作语言变量 获取:
L('语言变量'); 设置:
L('语言变量','值');
如: L('USER_INFO','用户信息'); //设置名称为USER_INFO的语言变量 批量赋值:
$arr['语言变量1'] = '值1';
$arr['语言变量2'] = '值2';
L($arr);
ThinkPHP系统常量
THINK_PATH // ThinkPHP系统目录
APP_PATH // 当前项目目录
APP_NAME // 当前项目名称
MODULE_NAME //当前模块名称
ACTION_NAME // 当前操作名称
TMPL_PATH // 项目模版目录
LIB_PATH // 项目类库目录
CACHE_PATH // 项目模版缓存目录
CONFIG_PATH //项目配置文件目录 LOG_PATH // 项目日志文件目录
LANG_PATH // 项目语言文件目录 TEMP_PATH //项目临时文件目录
PLUGIN_PATH // 项目插件文件目录 VENDOR_PATH // 第三方类库目录 DATA_PATH // 项目数据文件目录 IS_APACHE // 是否属于 Apache IS_IIS //是否属于 IIS
IS_WIN //是否属于Windows 环境 IS_LINUX //是否属于 Linux 环境
IS_FREEBSD //是否属于FreeBsd环境 NOW_TIME // 当前时间戳
MEMORY_LIMIT_ON // 是否有内存使用限制
MEMORY_LIMIT_ON // 是否有内存使用限制 OUTPUT_GZIP_ON // 是否开启输出压缩
MAGIC_QUOTES_GPC // MAGIC_QUOTES_GPC THINK_VERSION //ThinkPHP版本号
LANG_SET // 浏览器语言
TEMPLATE_NAME //当前模版名称
TEMPLATE_PATH //当前模版路径
// 网站根目录地址
// 当前项目(入口文件)地址
/Info // 当前模块地址
/Info/detail // 当前操作地址
/info/234.html // 当前 URL 地址
TMPL_FILE_NAME //当前操作的默认模版名(含路径) WEB_PUBLIC_URL //网站公共目录
APP_PUBLIC_URL //项目公共模版目录
预定义常量
WEB_LOG_ERROR=0 // 错误日志类型
WEB_LOG_DEBUG=1 // 调试日志类型
SQL_LOG_DEBUG=2 // SQL 日志类型
SYSTEM_LOG=0 // 系统方式记录日志
MAIL_LOG=1 // 邮件方式记录日志
TCP_LOG=2 // TCP 方式记录日志
FILE_LOG=3 // 文件方式记录日志
DATA_TYPE_OBJ=1 // 对象方式返回
DATA_TYPE_ARRAY=0 // 数组方式返回
URL_COMMON=0 // 普通模式 URL
URL_PATHINFO=1 // PATHINFO URL
URL_REWRITE=2 // REWRITE URL
HAS_ONE=1 // HAS_ONE 关联定义
BELONGS_TO=2 // BELONGS_TO 关联定义 HAS_MANY=3 // HAS_MANY 关联定义
MANY_TO_MANY=4 // MANY_TO_MANY 关联定义 EXISTS_TO_VAILIDATE = 0 // 表单存在字段则验证 MUST_TO_VALIDATE = 1 // 必须验证
VALUE_TO_VAILIDATE = 2 // 表单值不为空则验证
第二篇:总结ThinkPHP使用技巧经验分享3
总结ThinkPHP使用技巧经验分享(三)
2013/03/01 16:02 thinkphphj 评论
add方法返回主键(id)的值
在往数据表中添加数据时调用add方法,默认返回值就是刚添加的id值,就不用再去查询了.
save方法返回值的判断
在修改数据时,如果修改成功返回的是被修改的记录数0,1,2,3......
注意:以下几种情况返回 false,所以判断更新失败应使用 if(false === $this->save())
(1)更新的数据为空
(2)_before_update()方法返回false
(3)没有任何更新条件(没有定义where()里的条件,或者保存的数据里没有主键的值)
查询后置方法详解
如_after_select,_after_insert,_after_update,_after_delete,_after_find等 巧妙地利用这些方法可以简化开发
用_after_select(&$result,$options)举例: 返回 下一篇
参数:$result,这是select出的结果数组。注意这里是一个引用传参,也就是说我们可以直接改变传递过来的值而不需要返回 $options,这是查询的条件,也就是where()里面的条件
假如你查询出的数据有time这一字段,并且是以int型保存的,那么可以在这个方法里进行时间格式化的操作
$User->select();
echo $User->getLastSql();或者echo $User->_sql();
获取最后执行的sql语句,方便查看调试
跨模板主题调用模板
假如Tpl下有new主题,该主题下有User文件夹,文件夹下有index.html
你当前的模板主题是Tpl下的default,那么可以用$this->display('new:User:index');
或者用全路径输出$this->display('./Tpl/new/User/index.html');
路由规则^符号的使用
这个符号在手册中没有提及,但是作用却不可忽视。
用法:'user/^getlist|tag' => 'user/index'
作用:在user模块中,除了getlist和tag方法,其他存在的方法全部指向index方法。参数之间用|间隔 这样可以屏蔽一些不想让用户访问到但是又必须定义成public的方法