php Smarty模板引擎 foreach循環

foreach循環是smarty模板中一個最爲簡單的循環方法了,我們單循環用到最多的就是他了,下面我們一起來看看foreach循環一個應用實例。

模板文件:

代碼如下

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>{$web_tile}</title>
</head>
<body>
{$article_title}
<br/>
-- by {$author}
<hr/>
<br/>
{$content}
<br/>
-- publish @ {$time}

<br/>
<br/>
foreach test:

{foreach ( from=url key=b item=c )}
<a href="index.php?artcle_id={==b}">{==c}</a>
{/foreach}

<br/>

</body>
</html>

解析引擎:

代碼如下
// var
$pattern_var = "/{$left_tag}\$([wd]+){$right_tag}/";
$replace_var = '<?php echo $this->var_tpl_arr["$1"];?>';

if (preg_match($pattern_var, $content)) {
$content = preg_replace($pattern_var, $replace_var, $content);
}

// foreach
preg_match_all("/{$left_tag}foreachs+([^{]+?){$right_tag}/is", $content, $match_foreach);
if (isset($match_foreach[1]) && is_array($match_foreach)) {
foreach($match_foreach[1] as $match_key => $match_value) {
$split_foreachs = array_filter(preg_split('/s+/is', $match_value));
$new_foreach_tag = array();
foreach($split_foreachs as $split_foreach) {
$split = explode("=", $split_foreach);
if (count($split == 2)) {
if(in_array($split[0], array("from","item","key"))) {
//過濾標簽 不存在過濾
$new_foreach_tag[$split[0]] = $split[1];
}
}
}

$from = $key = $item = '';
extract($new_foreach_tag);
$key = ($key) ? '$'.$key.' =>' : '' ;
$replace_foreach = '<?php foreach($this->var_tpl_arr["'.$from.'"] as '.$key.' $'.$item.') { ?>';
$content = str_replace($match_foreach[0][$match_key], $replace_foreach, $content);

}
}

$pattern_foreach = "/{$left_tag}/foreach{$right_tag}/";
$replace_foreach = "<?php } ?>";
if (preg_match($pattern_foreach, $content)) {
$content = preg_replace($pattern_foreach, $replace_foreach, $content);
}

// var in statement
$pattern_var = "/{$left_tag}==([wd]+){$right_tag}/";
$replace_var = '<?php echo $$1;?>';

if (preg_match($pattern_var, $content)) {
$content = preg_replace($pattern_var, $replace_var, $content);
}

解析後:

代碼如下

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><?php echo $this->var_tpl_arr["web_tile"];?></title>
</head>
<body>
<?php echo $this->var_tpl_arr["article_title"];?>
<br/>
-- by <?php echo $this->var_tpl_arr["author"];?>
<hr/>
<br/>
<?php echo $this->var_tpl_arr["content"];?>
<br/>
-- publish @ <?php echo $this->var_tpl_arr["time"];?>

<br/>
<br/>
foreach test:

<?php foreach($this->var_tpl_arr["url"] as $b => $c) { ?>
<a href="index.php?artcle_id=<?php echo $b;?>"><?php echo $c;?></a>
<?php } ?>

<br/>

</body>
</html>

使用:

代碼如下

<?php

require_once 'core/YATP.class.php';

$app = new YATP();
date_default_timezone_set("Asia/Shanghai");
$app->is_cache = false;

$article_title = "yet,it is a simple template engine";
$author = "sanwhiteyu@tencent.com";
$web_tile = "just test ";
$content = "It is easy to write a simple template engine for yourself,what u can do is try to do it!";
$time = date("Y-m-d H:i:s",time());

$url = array(
"url1"=>http://www.111cn.net,
"url2"=>"http://www.baidu.com",
);

$app->assign("article_title",$article_title);
$app->assign("author",$author);
$app->assign("web_tile",$web_tile);
$app->assign("content",$content);
$app->assign("time",$time);
$app->assign("url",$url);
$app->display("index.html");


// end of script效果:

php Smarty模板引擎 foreach循環

更多相關文章
  • if else在smarty模板中算是最爲基礎的入門知識了,下面我舉一個實例來解析smarty模板中if else 的具體用法,希望文章對各位朋友會有所幫助.用法:{if}{/if}{if} {else}{/else
  • foreachphp教程 4(不是 php 3)包括了 foreach 結構,和 perl 以及其他語言很像.這只是一種遍曆數組簡便方法.foreach 僅能用于數組,當試圖將其用于其它數據類型或者一個未初始化的變量時會産生錯誤.有兩種語法,第二種比較次要但卻是第一種的有用的擴展.foreach (
  • 本文章整理了很多的jsp 頁面的for循環示例程序,如果你對于java循環不怎麽了解不防進入參考一下,非常全面的一篇文章例子1 代碼如下 <%List<Object[]> city=(List<Object[]>)request.getAttribute("l ...
  • 這款生成靜態頁面的方法與其它的有一點不同,這是利用smarty模板引擎的fetch函數,由smarty解析的文件保存到一個變量,然後再利用fopen 創建文件,此方法不適合大數據量生成. 代碼如下 include('
  • <!--{assign var="count" value=0}--> <!--{foreach from=cat_list(0,0,false,3,false) item=cat}--> {if $cat.level eq 0} 做事情0 {elseif ...
  • foreach與while都可以遍曆數組了,但是foreach與while函數在對數組操作時那一個會更有效一些呢,下面我們來看一些測試foreach與while效能的例子吧.foreach是對數組副本進行操作(通過拷貝數組),而while則通過移動數組內部指標進行操作,一般邏輯下認爲,while應該
  • 在php 中for循環與foreach是常用的兩個函數,for是用于數字較多,而foreach一般用于數組遍曆中. 代碼如下 //php當前循環爲1,循環由裏到外依次遞增,break默認爲1,例如跳出第2層循環for ($i=0;$i<3;$i++){ foreach (array(1,2,3 ...
  • 本文章簡單的介紹了java中的for循環按foreach的方法來操作,有需要的朋友可以參考一下,只是一個測試玩的實例,因爲這樣效率肯定不及foreach哦.知識點:1.foreach使用.2.小數隨機數的生成,Ran
一周排行