网站地图    收藏   

主页 > 后端 > smarty >

php Smarty模板引擎之 if else的用法

来源:未知    时间:2015-01-09 17:08 作者:xxadmin 阅读:

[导读] 用法: {if}{/if} {if} {else}{/else}{/if} 解析引擎: 代码如下 // if $if_operators = array(,,==,===,=,=,!=,!==); $is_operator = false; $pattern_if = /{$left_tag}ifs+((.*?)){$right_tag}/; preg_match _all($pattern_if,$content,$match...

用法:

  {if}{/if}

  {if} {else}{/else}{/if}

  解析引擎:

 代码如下  
// if
  $if_operators = array(">","<","==","===",">=","<=","!=","!==");
  $is_operator = false;
  $pattern_if = "/{$left_tag}ifs+((.*?)){$right_tag}/";
  preg_match_all($pattern_if,$content,$match_if);
  
  if (isset($match_if[1]) && is_array($match_if[1])) {
   
   foreach ($match_if[1] as $key_if=>$val_if) {
    foreach ($if_operators as $if_operator) {
     $items = explode($if_operator, $val_if);
     if (count($items) == 2) {
      $is_operator = true;
      $shift_left = substr($items[0], 0,1);
      $pop_left = substr($items[0], 1);
      $shift_right = substr($items[1], 0,1);
      
      $pop_right = substr($items[1], 1);
      $left_var = $shift_left == '$'? '$this->var_tpl_arr["'.$pop_left.'"]':$items[0];
      $right_var = $shift_right == '$'?'$this->var_tpl_arr["'.$pop_right.'"]':$items[1];
      $content = str_replace($match_if[0][$key_if], "<?php if({$left_var} {$if_operator} {$right_var}) { ?>", $content);
      break;
     } else {
      continue;
     }
    }
    if (!$is_operator) {
     $content = str_replace($match_if[0][$key_if], "<?php if({$val_if}) { ?>", $content);
    }
   }
  }
  
  
  // if close
  $pattern_if = "/{$left_tag}/if{$right_tag}/";
  $replace_if = "<?php } ?>;";
  if (preg_match($pattern_if, $content)) {
   $content = preg_replace($pattern_if, $replace_if, $content);
  }
  
  // else
  $pattern_else = "/{$left_tag}else{$right_tag}/";
  $replace_else = "<?php } else { ?>";
  if (preg_match($pattern_else, $content)) {
   $content = preg_replace($pattern_else, $replace_else, $content);
  }
  
  // else close
  $pattern_else = "/{$left_tag}/else{$right_tag}/";
  $replace_else = "";
  if (preg_match($pattern_else, $content)) {
   $content = preg_replace($pattern_else, $replace_else, $content);
  }

  模板表示方法:

 代码如下  

<br/>
<br/>
$var_left == {$var_left},$var_right == {$var_right}<br/><br/>
test if >:$var_left>1
<br/>
{if ($var_left>1)}
<b>if > 条件成立!</b>
{/if}
<br/>

test if <:$var_left<5
<br/>
{if ($var_left<5)}
<b>if < 条件成立!</b>
{/if}
<br/>

test if ==:$var_left==$va_right
<br/>
{if ($var_left==$va_right)}
<b>if == 条件成立!</b>
{else}
<b><font color=red>if = 条件不成立!</font></b>
{/if}

  解析后的缓存文件:

 代码如下  

<br/>
<br/>
$var_left == <?php echo $this->var_tpl_arr["var_left"];?>,$var_right == <?php echo $this->var_tpl_arr["var_right"];?><br/><br/>
test if >:$var_left>1
<br/>
<?php if($this->var_tpl_arr["var_left"] > 1) { ?>
<b>if > 条件成立!www.111cn.net</b>
<?php } ?>;
<br/>

  test if

 代码如下  
<:$var_left<5
<br/>
<?php if($this->var_tpl_arr["var_left"] < 5) { ?>
<b>if < 条件成立!</b>
<?php } ?>;
<br/>

  test if ==:$var_left==$va_right

 代码如下  
<br/>
<?php if($this->var_tpl_arr["var_left"] == $this->var_tpl_arr["va_right"]) { ?>
<b>if == 条件成立!</b>
<?php } else { ?>
<b><font color=red>if == 条件不成立!</b></b>
<?php } ?>;
 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论