cncml手绘网

标题: ThinkPHP模板中使用判断语句 [打印本页]

作者: admin    时间: 2018-8-2 16:02
标题: ThinkPHP模板中使用判断语句
我们可以使用if标签来定义复杂的条件判断,例如:
0 E+ E- _1 C' l7 P
  1. <if condition="($name eq 1) OR ($name gt 100) "> value1
    6 w# }7 b( h) R3 j
  2. 4 Z, @0 R) o: M# @) z2 l
  3. <elseif condition="$name eq 2" />value2
    / |( Q0 S3 E$ B* a. Z: m/ m
  4. . G' U7 R1 X, I& M/ z% o1 u) t& c
  5. <else /> value3
    % K- y! Z5 }+ ]8 k
  6. ' N, D- [0 `# ]$ f3 f
  7. </if>
复制代码
在condition属性中可以支持eq等判断表达式,同上面的比较标签,但是不支持带有”>”、”<”等符号的用法,因为会混淆模板解析,所以下面的用法是错误的:
  ^  I, s$ `& I( o- F9 B
  1. <if condition="$id < 5 "> value1
    " h+ Y$ b8 m& ?+ [

  2. ( S5 W8 T+ y) P, k* k& ~+ m
  3. <else /> value2+ J6 n: {: D8 ?( j3 k' m! R
  4. % q5 ?( w- z: [6 j' K
  5. </if>
复制代码
必须改成:( d1 V( i4 d, x; x+ g
  1. <if condition="$id lt 5 "> value1
    + }" g; }2 C" [+ _2 o, O4 c! E$ w
  2. 8 [) R3 i# D9 r0 u- W, o9 B
  3. <else /> value2" \5 z8 @0 M" G

  4. ! v* y3 P& D# |
  5. </if>
复制代码
除此之外,我们可以在condition属性里面使用php代码,例如:
' ~3 }& i1 ~9 ]
  1. <if condition="strtoupper($user['name']) neq 'THINKPHP' "> ThinkPHP9 {& ^" x+ @+ o6 b

  2. . Y9 ]" g" j* h& m' S9 u; i
  3. <else /> other Framework
    # ^5 Y8 p' k$ z
  4. ) B3 Y2 w' H. R: V
  5. </if>
复制代码

condition属性可以支持点语法和对象语法,例如:

自动判断user变量是数组还是对象

  1. <if condition="$user.name neq 'ThinkPHP' "> ThinkPHP7 l2 o. f8 b% ~
  2. 9 |1 I4 \, G' S+ i) C
  3. <else /> other Framework
    " b) n$ f: O( A; O1 |; r+ i$ g

  4. 7 [' r" P/ x/ c6 A# X, {$ M' s; I5 `. f
  5. </if>
复制代码

或者知道user变量是对象

  1. <if condition="$user:name neq 'ThinkPHP' "> ThinkPHP2 ~! {: r/ P$ x( s

  2. . x9 F& b6 T9 c$ Q* ]& C/ q( u
  3. <else /> other Framework! ]% s$ G4 ~0 `5 Y3 `& s! b

  4. + c1 t3 k- S" T  I1 [0 E
  5. </if>
复制代码

由于if标签的condition属性里面基本上使用的是php语法,尽可能使用判断标签和Switch标签会更加简洁,原则上来说,能够用switch和比较标签解决的尽量不用if标签完成。因为switch和比较标签可以使用变量调节器和系统变量。如果某些特殊的要求下面,IF标签仍然无法满足要求的话,可以使用原生php代码或者PHP标签来直接书写代码。

  1. eq 等于(==)( P  T+ y" C, Q

  2. ' o6 L! g9 T; @* y
  3. neq 不等于(!=)
    & f+ s* P( N: Q/ ]2 j

  4. 2 g2 t' _' ?$ s* N4 I& W/ ?6 C
  5. gt 大于(>)
    ' i3 U5 r, b6 p0 b; ^8 M' d1 R

  6. 6 R% |% @4 e0 C& s. F7 r# Q" P% n
  7. egt 大于等于(>=)
    7 x: C7 _9 g6 Z6 G
  8. ! w: Q1 Z4 F' ]8 j1 ~+ B
  9. lt 小于(<)
    3 T; Z2 k& _8 V( n- T
  10. . R8 A7 x  r# }
  11. elt 小于等于(<=)
      t9 A6 y% W' n; g# a3 }* @. E! ~, i
  12. * C5 f  @" x; W$ \0 n
  13. heq 恒等于(===)
    , o7 e# i  F2 K' X1 O

  14. + {% ~0 q5 k+ T7 H: ~
  15. nheq 不恒等于(!==)
复制代码


; [( t% k& |& L, F: G, l


+ z! p, O* Y) C* x注意% `/ u( [4 e$ X1 D+ @% ?4 n. ]
condition 属性值中,变量是需要 $ 符号的,这与其他标签不同。
, _: w- J7 N* C2 G2 X9 p% B2 t7 k提示1 b( U9 n, U& C3 t$ B! L
在判断输出系列标签中,应尽可能使用更为简洁的比较标签和 switch 标签等判断标签。
$ m; I" ?( q6 S& H( \4 [3 E; t& _如果 ThinkPHP 提供的各判断标签仍不能满足特殊的需求,可以直接使用原生 PHP 代码或者 PHP 标签来满足需求。' [2 {; k( o& P$ a" y

+ D$ K& e8 p7 O) q4 B




欢迎光临 cncml手绘网 (http://bbs.cncml.com/) Powered by Discuz! X3.2