cncml手绘网

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

作者: admin    时间: 2018-8-2 16:02
标题: ThinkPHP模板中使用判断语句
我们可以使用if标签来定义复杂的条件判断,例如:
  v7 S7 ~7 n( `0 x6 u
  1. <if condition="($name eq 1) OR ($name gt 100) "> value1
    ( Z6 W) E1 a; j4 M6 X3 \
  2. * r2 Y$ |! x; T
  3. <elseif condition="$name eq 2" />value2
    & W  [0 Y, s. Q2 o/ @+ m; B( }5 L
  4. 7 z6 ], j) u/ [! y/ h1 ~+ D
  5. <else /> value3
    9 I, e1 F$ b0 q2 X

  6. # {" q$ y+ J- R" @8 i) J
  7. </if>
复制代码
在condition属性中可以支持eq等判断表达式,同上面的比较标签,但是不支持带有”>”、”<”等符号的用法,因为会混淆模板解析,所以下面的用法是错误的:
" @/ B) x; ?( e+ E6 D
  1. <if condition="$id < 5 "> value1
    % }% I- l% `! B& |6 T7 B

  2. 2 z5 o+ }2 |& D1 z. i1 u
  3. <else /> value2
      \& C4 x: [! {% A6 a; h4 `
  4. 5 b3 t* @6 |- ?$ o5 R0 }, E
  5. </if>
复制代码
必须改成:
& Y  |5 v+ ]3 I, b4 H' E
  1. <if condition="$id lt 5 "> value1
    2 r, Q0 E, ?1 x4 D8 _4 ~& q, p8 z
  2. % w- v4 K1 k2 ]4 `
  3. <else /> value2
    : L% U7 N1 @8 h( s& [5 e0 i

  4. 0 f* \: A; i& f- y: U( ^0 C9 p
  5. </if>
复制代码
除此之外,我们可以在condition属性里面使用php代码,例如:* D3 j% t5 T" H7 z! m% p
  1. <if condition="strtoupper($user['name']) neq 'THINKPHP' "> ThinkPHP
    ! J6 c& m4 ?3 S( z8 W8 ~
  2. ! T. Q6 G& d* D; b7 }
  3. <else /> other Framework/ B% h0 k8 B3 U9 X: ^  M+ X) {9 h6 l
  4. ! s7 g+ Q1 {6 H/ V3 `
  5. </if>
复制代码

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

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

  1. <if condition="$user.name neq 'ThinkPHP' "> ThinkPHP  D( }3 |+ C- E8 n; k; E! ]- Y$ E
  2. 1 J# d. J; @; G7 X/ J! f$ C: }
  3. <else /> other Framework* e; ?& M9 `) a1 ]% V) s2 d! M( `

  4. 2 q& e; E7 F; u7 R- x0 a
  5. </if>
复制代码

或者知道user变量是对象

  1. <if condition="$user:name neq 'ThinkPHP' "> ThinkPHP
    ; {  C& s  b, o; A

  2. * t, O0 g: E' E/ ]# V) Y/ p
  3. <else /> other Framework
    . f# ?/ L. }( J' I+ G! k

  4. 3 w# t9 o8 m/ y6 F, W: X! e
  5. </if>
复制代码

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

  1. eq 等于(==), J4 ~" T  m; _( z- _
  2. / @* B: _5 ]+ c1 b$ L+ q5 j0 ]
  3. neq 不等于(!=)$ H# C' S- l) }% X+ Z9 N
  4. % ^' m8 y* Y* A, s5 X% |, Z$ ~
  5. gt 大于(>)
    6 p' q! A9 d7 s7 @2 s1 b: t% {0 ?

  6. 3 m  t8 y+ e" I; S1 m
  7. egt 大于等于(>=)
    , h2 H; m) c6 g9 ]
  8. $ O' u0 u- ^$ ]0 k! _7 I7 J
  9. lt 小于(<)
    ; ]# }5 v" u/ v8 f; B
  10. ' M& P- W  K! Y; O( F& F
  11. elt 小于等于(<=)
    6 Y2 J* S! E; S0 {3 k1 B) z
  12. 1 |9 F0 \) v6 f3 d  j" F( p" w
  13. heq 恒等于(===)
    . Z3 _/ @2 L2 ]# l) R
  14. ) @" v  P- k: h7 P3 b' g0 B4 D( V. h! _
  15. nheq 不恒等于(!==)
复制代码

+ L( k4 J# _# ]( [" R

, ^+ R& |2 f/ R2 t' D
注意
$ E4 d4 W7 M& I( l$ n. X8 pcondition 属性值中,变量是需要 $ 符号的,这与其他标签不同。( V" P. b- m- u5 S- n
提示1 L. i8 j+ p7 n8 s  M6 V# C7 i
在判断输出系列标签中,应尽可能使用更为简洁的比较标签和 switch 标签等判断标签。. Z" j9 @/ o! I7 p6 g9 n
如果 ThinkPHP 提供的各判断标签仍不能满足特殊的需求,可以直接使用原生 PHP 代码或者 PHP 标签来满足需求。
4 b( y( U" p1 c& G0 D. M) w4 N! F" G' }





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