成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

PHP開發必備 一步步學PHP模版引擎Dwoo

開發 后端
PHP 獨特的語法混合了 C、Java、Perl 以及 PHP 自創新的語法。它可以比 CGI或者Perl更快速的執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多。本文介紹了一款PHP的模版引擎Dwoo,一起來看。

PHP目前是使用最廣泛的腳本解析動態語言之一。在PHP的開發當中,開發者都很關心的一個問題是,如何最大程度地將頁面和商業邏輯分離。而目前的很多PHP的開發框架,在這方面都有很好的解決方案,比如Zend,Agavi,CakePHP和CodeIgniter。然而,假如你的項目不是太大而沒使用這些框架時,則可以選用一些開源的PHP模版引擎來實現頁面和邏輯的分離,目前比較著名的有Smarty。本文將介紹另一款新興的PHP模版引擎Dwoo,它同樣有很多優點,值得讀者去學習。

一、安裝Dwoo

首先到Dwoo的官方網站下載(http://www.dwoo.org)最新的版本1.1.7。在下載后,解壓dwoo,將解壓目錄命名為dwoo,當然,你也可以用pear的安裝方法安裝,方法為:

pear channel-discover pearhub.org

pear install pearhub/Dwoo

二、Dwoo模版簡介

在Dwoo中,跟象Smarty等模版引擎差不多的是,它允許用戶用普通的HTML編輯工具編輯表現層的頁面,然后在需要產生動態內容的地方用占位符表示。模版引擎在解析的時候,會把如數據庫中的或者業余邏輯計算結果填充到這些占位符中。下面先看一個簡單的例子。

我們先建立一個模版文件,Dwoo的模版文件默認是tpl,當然你也可以改為其他文件后綴。模版文件名為knock.tpl,把它保存在template文件夾中,內容為:

 

  1. <html> 
  2. <head></head> 
  3. <body> 
  4. <blockquote> 
  5. Knock knock! <br/> 
  6. Who's there? <br/> 
  7. {$name} <br/> 
  8. {$name} who? <br/> 
  9. {$punchline}  
  10. </blockquote> 
  11. </body> 
  12. </html> 

可以看到,在Dwoo中,模版文件中,把需要動態更替的內容用{$ }這樣的形式包裹起來,作為占位符,占位符當中的內容到時會被自動更替為實際的內容。接下來看如何使用Dwoo,代碼如下:

 

  1. <?php  
  2. include 'dwooAutoload.php';  
  3. // 創建dwoo實例  
  4. $dwoo = new Dwoo();  
  5. //讀取模版文件   
  6. $tpl = new Dwoo_Template_File('tmpl/knock.tpl');  
  7. // 對模版變量賦值  
  8. $data = array();  
  9. $data['name'] = 'Boo';  
  10. $data['punchline'] = 'Don\'t cry, it\'s only a joke';  
  11. // 將實際內容輸出到模版  
  12. $dwoo->output($tpl$data);  
  13. ?> 

下面是使用Dwoo的幾個步驟:

1、首先要包含Dwoo自動裝載類dwooAutoload.php,這個類是自動加載了Dwoo模版所需要的其他依賴的類和工具類;

2、創建Dwoo類的實例;

3、通過new Dwoo_Template_File的方法加載模版,其中的參數為模版文件所在的路徑;

4、設置要向模版文件中輸出的替換內容,在Dwoo中,只需要通過定義一個關聯數組的方法即可,數組中每個元素的名稱跟模版文件中的占位符一一對應,數組中的每個值,就是要替換模版中的實際內容;

5、通過調用output方法,將數據向模版中輸出,傳入的參數為輸出的數組內容和模版路徑。

下圖為輸出結果:

shuchujieguo

#p#

三、Dwoo語法講解

下面以實例的形式講解下Dwoo的語法,先來看最常用的if語句。

1) if 語句

下面是一個模版的例子:

  1. <html> 
  2. <head></head> 
  3. <body> 
  4. {if $auth == 0}  
  5. Not logged in  
  6. {else}  
  7. Logged in as: Anonymous User   
  8. {/if}  
  9. </body> 
  10. </html> 

可以看到,Dwoo中的if語句其實跟普通的if語句沒什么區別。接下來我們看下控制這個模版的php文件,如下:

  1. <?php  
  2. include 'dwooAutoload.php';  
  3. try {  
  4. $dwoo = new Dwoo();  
  5. $tpl = new Dwoo_Template_File('tmpl/auth.tpl');  
  6. $data = new Dwoo_Data();  
  7. $data->assign('auth', rand(0,1));  
  8. $dwoo->output($tpl$data);  
  9. } catch (Exception $e) {  
  10. echo "Error: " . $e->getMessage();   
  11. }  
  12. ?> 

注意,這里我們使用了new Dwoo_Data();這個Dwoo_Data()方法的優勢在于,它比較容易存放大量的數據,比用數組的方法去存儲數據方便多了,而且它本身提供了很多不同的方法去獲得,清理和刪除模版變量。這個例子中,用隨機數的方法產生了auth變量,結果可能為如下圖:

xiatu

當然,可以使用if elseif語句,比如模版中:

 

  1. <html> 
  2. <head></head> 
  3. <body> 
  4. {if $auth == 1}  
  5. Logged in as: Anonymous User   
  6. {elseif $auth == 2}  
  7. Logged in as: Administrator   
  8. {else}  
  9. Not logged in  
  10. {/if}  
  11. </body> 
  12. </html> 

2) LOOP循環語句

在Dwoo中,可以使用{loop}進行循環,動態產生數據,下面是例子:

  1. <html> 
  2. <head></head> 
  3. <body> 
  4. <ul> 
  5. {loop $items}  
  6. <li>{escape($item)}</li> 
  7. {/loop}  
  8. </ul> 
  9. </body> 
  10. </html> 

下面是產生數據的php文件:

  1. <?php  
  2. include 'dwooAutoload.php';  
  3. try {  
  4. $dwoo = new Dwoo();  
  5. $tpl = new Dwoo_Template_File('tmpl/list.tpl');  
  6. $data = new Dwoo_Data();  
  7. $items = array();  
  8. $items[] = array('item' => 'red');  
  9. $items[] = array('item' => 'yellow');  
  10. $items[] = array('item' => 'blue');  
  11. $items[] = array('item' => 'green');  
  12. $data->assign('items'$items);  
  13. $dwoo->output($tpl$data);  
  14. } catch (Exception $e) {  
  15. echo "Error: " . $e->getMessage();   
  16. }  
  17. ?> 

這里,我們生成了數組items,然后在模版文件中,通過{loop $items}即可循環輸出內容。結果如下圖:

jieguo

注意,這里使用了{escape($item)}的方法輸出每一行的內容,其中eascape是dwoo中使用的插件,是將所有內容在輸出前使用HTML編碼格式過濾,這可以防止XSS攻擊,是個很好的實踐。

而在Dwoo中,可以同樣使用{foreach}而達到同樣的效果,代碼如下:

 

  1. <html> 
  2. <head></head> 
  3. <body> 
  4. <ul> 
  5. {foreach $items item}  
  6. <li>{escape($item)}</li> 
  7. {/foreach}  
  8. </ul> 
  9. </body> 
  10. </html> 

同樣,foreach也可以使用如下的用法,即:

 

  1. <html> 
  2. <head></head> 
  3. <body> 
  4. <ul> 
  5. {foreach $items key value}  
  6. <li>{upper($key)} is for {$value}</li> 
  7. {/foreach}  
  8. </ul> 
  9. </body> 
  10. </html> 

而配合這個模版,PHP的控制頁面中的關聯數組的寫法如下:

  1. $data = new Dwoo_Data();  
  2. $items = array(  
  3. 'a' => 'apple',  
  4. 'b' => 'ball',  
  5. 'c' => 'cat',  
  6. 'd' => 'dog' 
  7. );  
  8. $data->assign('items'$items); 

這樣輸出結果如下圖:

shuchujieguo

我們既然學會了loop,下面來嘗試下從數據庫中取出數據集,并通過Dwoo顯示出來,下面是模版文件的主要部分:

 

  1. <body> 
  2. <table> 
  3. <tr class="heading"> 
  4. <td>Author</td> 
  5. <td>Title</td> 
  6. </tr>   
  7. {loop $records}  
  8. <tr> 
  9. <td>{$author}</td> 
  10. <td>{$title}</td> 
  11. </tr>   
  12. {/loop}  
  13. </table> 
  14. </body> 

而PHP文件代碼如下,其中使用了PDO去訪問數據庫:

 

  1. <? php  
  2. include 'dwooAutoload.php';  
  3. // 連接數據庫  
  4. try {  
  5. $dbh = new PDO('mysql:dbname=library;host=localhost''user''pass');  
  6. } catch (PDOException $e) {  
  7. echo "Error: Could not connect. " . $e->getMessage();  
  8. }  
  9. $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
  10. try {  
  11. $sql = "SELECT a.AuthorName AS author, t.TitleName AS title FROM author AS a, title AS t, author_title AS at WHERE a.AuthorID = at.AuthorID AND t.TitleID = at.TitleID ORDER BY author LIMIT 0,20";  
  12. $sth = $dbh->query($sql);  
  13. while ($row = $sth->fetchObject()) {  
  14. $records[] = array('author' => $row->author, 'title' => $row->title);  
  15. }  
  16. //關閉數據庫連接  
  17. unset($dbh);   
  18. $dwoo = new Dwoo();  
  19. $tpl = new Dwoo_Template_File('tmpl/books.tpl');  
  20. $data = new Dwoo_Data();  
  21. $data->assign('records'$records);  
  22. $dwoo->output($tpl$data);   
  23. } catch (PDOException $e) {  
  24. echo "Error: Could not execute query \"$sql\". " . $e->getMessage();   
  25. unset($dbh);  
  26. } catch (Exception $e) {  
  27. echo "Error: " . $e->getMessage();   
  28. }   
  29. ?> 

 

#p#

四、模版組合

在頁面設計中,常用的最佳實踐是把一個復雜的頁面劃分為不同的部分,同樣模版文件中也應該指定不同的部分,最后再將其組合起來,比如下圖是常件的模版件結構:

mobanjianjiegou

可以看到有頭部,尾部和頁面的主體三部分組成,下面給出它們的模版文件header.tpl:

 

  1. <!-- BEGIN header.tpl --> 
  2. <html> 
  3. <head></head> 
  4. <body> 
  5. <table width="100%" border="1"> 
  6. <tr> 
  7. <td align="center"><a href="#">Home</a></td> 
  8. <td align="center"><a href="#">News</a></td> 
  9. <td align="center"><a href="#">Weather</a></td> 
  10. <td align="center"><a href="#">Hotels</a></td> 
  11. <td align="center"><a href="#">Dining</a></td> 
  12. </tr> 
  13. </table> 
  14. <p /> 
  15. <h2>{$title}</h2> 
  16. <p /> 
  17. <!-- END header.tpl --> 
  18. footer.tpl  
  19. <!-- BEGIN footer --> 
  20. <table width="100%" align="center"> 
  21. <tr> 
  22. <td align="center"><font size="-2">&copy; {$year}. All rights reserved.</font></td> 
  23. </tr> 
  24. </table> 
  25. </body> 
  26. </html> 

而Dwoo中,使用include可以將不同的模版包含到同一個模版中去,比如下面是框架主模版文件main.tpl:

 

  1. {include(file='header.tpl')}  
  2. <!-- BEGIN main.tpl --> 
  3. <table border="1"> 
  4. <tr> 
  5. <td valign="top"> 
  6. <strong>{$headline}</strong> 
  7. <p /> 
  8. {$content}  
  9. </td> 
  10. <td valign="top" align="center" width="25%"> 
  11. <strong>Special Feature</strong><br /> 
  12. {$feature}  
  13. </td> 
  14. </tr> 
  15. </table> 
  16. <!-- END main.tpl --> 
  17. {include(file='footer.tpl')} 

而框架文件的php文件如下,可以為主框架模版中的變量賦值:

  1. <?php  
  2. include 'dwooAutoload.php';  
  3. try {  
  4. $dwoo = new Dwoo();  
  5. $tpl = new Dwoo_Template_File('tmpl/main.tpl');  
  6. $data = new Dwoo_Data();  
  7. $data->assign('title''Welcome to London!');  
  8. $data->assign('headline''Playing in the Park');  
  9. $data->assign('content''It\'s a warm summer day, and Simon finds the lake in St. James Park too inviting for words...');  
  10. $data->assign('feature''Tower Bridge - Snapshots from the Top');  
  11. $data->assign('year'date('Y'mktime()));  
  12. $dwoo->output($tpl$data);  
  13. } catch (Exception $e) {  
  14. echo "Error: " . $e->getMessage();   
  15. }  
  16. ?> 

可以得出如下結果:

jieguo

而另外的實現方法,是不使用include,而是在主框架模版中如下設置:

 

  1. {$header}  
  2. <!-- BEGIN main.tpl --> 
  3. <table border="1"> 
  4. <tr> 
  5. <td valign="top"> 
  6. <strong>{$headline}</strong> 
  7. <p /> 
  8. {$content}  
  9. </td> 
  10. <td valign="top" align="center" width="25%"> 
  11. <strong>Special Feature</strong><br /> 
  12. {$feature}  
  13. </td> 
  14. </tr> 
  15. </table> 
  16. <!-- END main.tpl --> 
  17. {$footer} 

而在PHP文件中,再動態設置header和footer的變量的值,

  1. $data->assign('header',$dwoo->get(new Dwoo_Template_File('tmpl/header.tpl'), $data));  
  2. $data->assign('footer',$dwoo->get(new Dwoo_Template_File('tmpl/footer.tpl'), $data)); 

這里使用了Dwoo中的get方法,將兩個模版文件中的內容提取出來,設置到header和footer兩個變量中去。

#p#

五、Dwoo中的插件機制

在Dwoo中,為開發者提供了大量方便的插件,比如前文提到的escape過濾功能,也是Dwoo 的插件之一。下面再學習一個同樣功能的插件auto_esacpe,它其實實現的是跟escape一樣的功能,但它可以針對一整段的模版變量進行格式化,比如,如下的模版:

 

  1. <html> 
  2. <head></head> 
  3. <body> 
  4. {auto_escape on}  
  5. {$html}  
  6. {/auto_escape}  
  7. </body> 
  8. </html> 

這里使用了{auto_escape on},表明在 {/auto_escape}前的輸出全部要進行HTML格式化,考察如下的php腳本:

  1. <?php  
  2. include 'dwooAutoload.php';  
  3. try {  
  4. $dwoo = new Dwoo();  
  5. $tpl = new Dwoo_Template_File('tmpl/out.tpl');  
  6. $data = array();  
  7. $data['html']= '<span id="ack">Welcome to Jack & Jill\'s humble abode.</span>';  
  8. $dwoo->output($tpl$data);  
  9. } catch (Exception $e) {  
  10. echo "Error: " . $e->getMessage();   
  11. }  
  12. ?> 

其輸出為如下圖:

shuchujieguo

同樣,Dwoo也有象php中的strip_tags方法,用來去掉HTML標記,比如:

 

  1. <html> 
  2. <head></head> 
  3. <body> 
  4. {strip_tags($html)}  
  5. </body> 
  6. </html> 

對應的PHP腳本為:

  1. $data = array();  
  2. $data['html'] = '<a href="http://www.google.com">Search</a>'

那么將會輸出如下結果:

shuchujieguo

下面再介紹Dwoo中關于日期格式化的處理,其中可以使用date_format這個插件,這個插件需要傳入兩個參數,一個是要處理的日期,另外一個是指定用什么格式去格式化處理日期,舉個例子:

  1. <html> 
  2. <head></head> 
  3. <body> 
  4. {date_format $date "%d.%m.%Y"}  
  5. <br/> 
  6. {date_format $date "%B %d, %Y %I:%M %p"}  
  7. </body> 
  8. </html> 

處理的PHP代碼的核心部分:

  1. $data = array();  
  2. $data['date'] = '14 July 2010 21:35'

下面為其輸出:

shuchujieguo

小結

在本文中,介紹了PHP模版引擎Dwoo的基本原理和用法,給讀者一個快速的入門,在下一篇中,將深入介紹挖掘Dwoo中的一些特色功能。

【編輯推薦】

  1. PHP開發必備 PHP持續集成工具介紹(上)
  2. PHP開發必備 PHP持續集成工具介紹(下)
  3. PHP正則表達式 PHP中的正則函數
  4. PHP中幾個常用的時間應用方式
責任編輯:于鐵 來源: IT168
相關推薦

2011-05-19 11:03:02

PHPDwoo

2018-06-11 15:30:12

2017-01-19 21:08:33

iOS路由構建

2019-03-05 14:09:27

Docker存儲容器

2019-07-09 15:23:22

Docker存儲驅動

2018-12-24 10:04:06

Docker存儲驅動

2023-12-26 07:59:01

2010-03-04 16:28:17

Android核心代碼

2016-11-02 18:54:01

javascript

2017-12-25 11:50:57

LinuxArch Linux

2021-01-03 15:07:16

開發編程語言后端.

2011-05-10 10:28:55

2024-08-30 08:30:29

CPU操作系統寄存器

2024-09-30 09:56:59

2009-12-17 16:36:23

無線路由設置密碼

2018-04-23 14:23:12

2017-01-06 15:13:25

LinuxVim源代碼

2018-07-13 15:36:52

2024-08-06 09:29:54

程序機器指令字符串

2020-12-24 11:19:55

JavaMapHashMap
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本午夜一区 | 亚洲每日更新 | 精品日韩在线 | 精品一区二区电影 | 亚洲国产二区 | 超碰免费在线观看 | 亚洲欧美激情网 | 一区二区三区精品在线 | av在线影院 | 成人性生交大片免费看r链接 | 日韩毛片在线观看 | 日本中文字幕视频 | 亚洲欧美日韩一区 | 成人高清视频在线观看 | 91久久国产综合久久 | 日韩二| 成人免费视频网站在线看 | 免费观看一级特黄欧美大片 | 成人免费黄色片 | www.精品一区 | 久久久久久中文字幕 | 黄色毛片一级 | 亚洲综合在线一区二区 | 天堂久久网 | 国产精品夜间视频香蕉 | 波多野结衣中文字幕一区二区三区 | 成人免费日韩 | 精品美女久久久 | 亚洲精品国产综合区久久久久久久 | 黄篇网址 | 欧美日韩国产一区二区 | 91视频进入| 国产成人在线看 | 国产日韩欧美一区二区 | 日韩视频精品 | 日本免费在线 | 国产乱码精品一区二区三区中文 | 国产成人综合网 | www.xxxx欧美 | av片免费| 久久婷婷麻豆国产91天堂 |