日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
PHP開發(fā)必備PHP模版引擎Dwoo深入學習

在上一篇關于Dwoo的教程中(PHP開發(fā)必備 一步步學PHP模版引擎Dwoo),我們討論了Dwoo中的基本用法。在本文中,我們將進一步講解在Dwoo中的一些高級用法,比如插件機制的編寫以及如何跟常見的PHP框架整合。

為甘南等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及甘南網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為成都網(wǎng)站制作、成都做網(wǎng)站、甘南網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

一、Dwoo中模版的繼承

Dwoo的其中一個強大功能是它可以支持模版的繼承。這實現(xiàn)起來是十分簡單的,只需要定義好一個父模版,然后子模版則可以繼承父模版了,并且可以在子模版中定義多種新的特性。聰明的開發(fā)者會善于利用這個特性,去減少重復的勞動。

Dwoo中繼承模版的關鍵在于“擴展”的插件機制,它允許模版去繼承另外一個模版。為了更好地理解這一特性,我們舉個例子說明如下。假設目前你已經(jīng)有一個基類的模版,名字叫base.tpl,其中包含了兩個區(qū)域,一個是導航區(qū),一個是內(nèi)容區(qū),如下:

 
 
 
 
  1.  
  2. {block "nav"}
  3. {/block}
  4. {block "content"}
  5. This is content for the main page.
 
  • {/block}
  • 現(xiàn)在,假設你的一些頁面需要使用水平導航條,你只需要繼承基類模版頁即可,并且可以重新定義導航條的樣式,如下代碼,我們把這個代碼定義為child.tpl:

     
     
     
     
    1. {extends "base.tpl"}
    2. {block "nav"}
    3. Home | 
    4. News |
    5. Weather |
    6. Hotels |
    7. Dining
  • {/block}
  • 這里使用了{extends “base.tpl”}指出是繼承了父類的模版,并且在這里的{block “nav”}區(qū)域中,重寫了導航條的內(nèi)容,最后輸出為如下圖:

    現(xiàn)在我們考察另外一種情況,假設一些頁面中需要額外的子導航菜單,比如需要以垂直形式顯示導航條,這時,我們可以采用如下代碼:

     
     
     
     
    1. {extends "child.tpl"}
    2. {block "nav"}
    3. {$dwoo.parent}
    4. {$subtitle}

      • {loop $items}
      • {$item}
      •  
      • {/loop}
     
  • {/block}
  • {block "content"}
  • This is content for the Dining page.
  • {/block}
  • 在這里,使用了{$dwoo.parent}去調用了父類模版,注意這里是繼承了child.tpl這個模版,也就是說,調用了父類模版中的導航條中的內(nèi)容,并且這里又重新定義了一個垂直的導航條,注意這里還重寫了content區(qū)域的內(nèi)容,覆蓋了父模版中對應的content區(qū)域的內(nèi)容了,結果如下圖:

    可以看到,只要適當使用模版繼承,則可以大大方便開發(fā)。

    #p#

    二、子模版

    Dwoo支持子模版,這些子模版使得開發(fā)者可以在應用中重用它們。子模版的創(chuàng)建方法是使用標簽{template}….{/template},其中要提供唯一的名稱,以便在其他地方進行引用。而在其他地方引用子模版,可以使用”load template”標簽加載。

    子模版中可以傳遞多個參數(shù),下面直接看例子以方便理解。首先編寫一個子模版,名稱叫slave.tpl,代碼如下:

     
     
     
     
    1. {template mylist data}
      • {foreach $data d}
      • {$d}
      • {/foreach}
    2. {/template}

    這里,我們把這個子模版命名為mylist,其中有一個循環(huán)取讀取data變量中的值并輸出。

    有了子模版后,我們就可以在需要其的地方加載它,比如,在一個模版文件master.tpl中,可以這樣調用:

     
     
     
     
    1. {load_templates "slave.tpl"}
    2. {mylist $items}

    這里用load_templates加載slave.tpl的子模版,并且為子模版mylist賦值items變量,而items變量可以由如下代碼去賦值:

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

    可以看到輸出如下:

    可以看到,子模版的確十分方便使用,而且子模版中的內(nèi)容一旦變更,其他所有用到子模版地方的內(nèi)容也會接著變化。

    #p#

    三、編寫自己的插件

    Dwoo中的一個前大功能是能可以讓開發(fā)者編寫插件,并通過Dwoo的addplugin機制加載自己寫的類,現(xiàn)舉一個簡單例子說明。比如下面的代碼,封裝了對email的操作:

     
     
     
     
    1. function fix_address(Dwoo $dwoo, $str) {
    2. return str_replace(
    3. array('@', '.', '-'), 
    4. array(' at ', ' dot ', ' dash '), 
    5. $str
    6. );
    7. }
    8. include 'dwooAutoload.php';
    9. try {
    10. $dwoo = new Dwoo();
    11. $tpl = new Dwoo_Template_File('tmpl/plugin.tpl');
    12. $dwoo->addPlugin('email_safe', 'fix_address');
    13. $data['string']= 'vikram@cdxwcx.com';
    14. $dwoo->output($tpl, $data);
    15. } catch (Exception $e) {
    16. echo "Error: " . $e->getMessage(); 
    17. }
    18. ?>

    在這個例子中,我們想將用戶EMAIL中的象@,分隔符等符號用英文替換掉,這樣防止象網(wǎng)上機器人等去采集EMAIL,泄露私隱。其中fix_address方法為替換的方法。而通過dwoo中的addPlugin方法,命名一個插件,名字為email_safe,而插件的內(nèi)容則指定為fix_address方法。在使用這個插件時,可以如下使用,plugin.tpl內(nèi)容為:

     
     
     
     
    1. {email_safe($string)}

    下圖為輸出結果:

    而另外一種使用dwoo插件的方法為繼承Dwoo_Filter abstract class,如下:

     
     
     
     
    1. class Dwoo_Plugin_email_safe extends Dwoo_Plugin
    2. public function process($email)
    3. {
    4. return str_replace(
    5. array('@', '.', '-'), 
    6. array(' at ', ' dot ', ' dash '), 
    7. $email
    8. );
    9. }
    10. }
    11. ?>

    如果用這種方式的話,則可以把該文件保存在dwoo目錄下的plugins目錄下,則dwoo的自動加載機制會自動加載這個插件,而不用每次使用時都使用addplugin的功能。

    #p#

    四、DWOO的過濾器

    同樣,dwoo中也支持用戶編寫過濾器,它可以在模版內(nèi)容向用戶輸出前進行一些相關的操作,跟插件類似,可以使用addFilter()加載自己編寫的過濾器,例子如下:

     
     
     
     
    1. function activate_mailto_links(Dwoo $dwoo, $str) {
    2. return preg_replace('/([a-zA-Z0-9]+@[a-zA-Z0-9._-]+\.[a-zA-Z]+)/', '$1', $str);
    3. }
    4. include 'dwooAutoload.php';
    5. try {
    6. $dwoo = new Dwoo();
    7. $dwoo->addFilter('activate_mailto_links');
    8. $tpl = new Dwoo_Template_File('tmpl/filter.tpl');
    9. $data['string']= 'Press enquiries: press@example-domain.com or call 1-800-1234. General inquiries: info@example-domain.com.';
    10. $dwoo->output($tpl, $data);
    11. } catch (Exception $e) {
    12. echo "Error: " . $e->getMessage(); 
    13. }
    14. ?>

    這個例子的過濾器中,作用是自動把模版合成輸出后的內(nèi)容中的含有的郵件地址自動加上mailto:的郵件鏈接。結果如下輸出:

    同樣,也可以這樣寫:

     
     
     
     
    1. class Dwoo_Filter_activate_mailto_links extends Dwoo_Filter
    2. public function process($str)
    3. {
    4. return preg_replace('/([a-zA-Z0-9]+@[a-zA-Z0-9._-]+\.[a-zA-Z]+)/', '$1', $str);
    5. }
    6. }
    7. ?>

    把該文件保存在dwoo下的plugins目錄中,同樣DWOO會自動加載。

    #p#

    五、DWOO中的緩存

    Dwoo中已經(jīng)內(nèi)置了很好的緩存功能,大大提高了效率,下面講解使用dwoo緩存的步驟:

    1. 在Dwoo_Template_File的構造函數(shù)中,設定cache的名稱和緩存時間。

    2. 在isCached()方法中,編寫相關的模版生成代碼,并且當緩存存在的時候,直接返回緩存中的頁面。

    下面舉一個搜索Twitter中信息的例子來說明如何使用緩存:

     
     
     
     
    1. ...
    2. div.outer {...}{
    3. border-bottom: dashed orange 1px;
    4. padding: 4px;
    5. clear: both;
    6. height: 50px;
    7. div.img {...}{
    8. float:left;
    9. padding-right: 2px;
    10. }
    11. span.attrib {...}{
    12. font-style: italic;
    13. }
    14.  
    15. {$title}

    16. {loop $records}
  • {$tweet} 
     By {$owner} on {$time}
  •  
  • {/loop}
  • 上面的模版是循環(huán)輸出在Twitter中檢索輸出的微博內(nèi)容。接下來看處理模版的PHP程序,如下:

     
     
     
     
    1. include 'dwooAutoload.php';
    2. $dwoo = new Dwoo();
    3. $tpl = new Dwoo_Template_File('tmpl/tweets.tpl', 120, 'id_g75430i472j');
    4. //檢查緩存中是否已經(jīng)存在該文件,存在的話,從緩存中顯示
    5. if ($dwoo->isCached($tpl)) {
    6. $dwoo->output($tpl, array());
    7. echo '(cached output)';
    8. } else {
    9. //緩存中不存在,直接搜索twitter 
    10. $result = simplexml_load_file('http://search.twitter.com/search.atom?q=pasta&lang=en');
    11. $records = array();
    12. foreach ($result->entry as $entry) {
    13. $item['image'] = (string)$entry->link[1]['href']; 
    14. $item['owner'] = (string)$entry->author->name;
    15. $item['uri'] = (string)$entry->author->uri;
    16. $item['tweet'] = (string)$entry->content;
    17. $item['time'] = date('d M Y, h:i', strtotime($entry->published)); 
    18. $records[] = $item;
    19. }
    20. $data = new Dwoo_Data();
    21. $data->assign('records', $records);
    22. $data->assign('title', $result->title);
    23. $dwoo->output($tpl, $data); 
    24. }

    上面的PHP代碼中,首先是用isCached()方法,判斷緩存中是否有該文件,如果有的話則直接讀取緩存中已經(jīng)合成好的頁面文件顯示給用戶,否則的話調用twitter的Atom公開API接口去查詢關鍵字pasta,再輸出到頁面。輸出結果如下圖:

    同時注意,$tpl = new Dwoo_Template_File('tmpl/tweets.tpl', 120, 'id_g75430i472j');中,第2個參數(shù)是緩存的過期時間,為120秒,第3個參數(shù)是緩存的名稱,而且該名稱在應用中必須是唯一的。


    分享名稱:PHP開發(fā)必備PHP模版引擎Dwoo深入學習
    網(wǎng)站URL:http://www.5511xx.com/article/dpcposc.html