日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

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

新聞中心

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

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

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

一、Dwoo中模版的繼承

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

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

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

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

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

     
     
     
     
    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}
  • 在這里,使用了{(lán)$dwoo.parent}去調(diào)用了父類模版,注意這里是繼承了child.tpl這個(gè)模版,也就是說(shuō),調(diào)用了父類模版中的導(dǎo)航條中的內(nèi)容,并且這里又重新定義了一個(gè)垂直的導(dǎo)航條,注意這里還重寫(xiě)了content區(qū)域的內(nèi)容,覆蓋了父模版中對(duì)應(yīng)的content區(qū)域的內(nèi)容了,結(jié)果如下圖:

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

    #p#

    二、子模版

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

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

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

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

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

     
     
     
     
    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)容也會(huì)接著變化。

    #p#

    三、編寫(xiě)自己的插件

    Dwoo中的一個(gè)前大功能是能可以讓開(kāi)發(fā)者編寫(xiě)插件,并通過(guò)Dwoo的addplugin機(jī)制加載自己寫(xiě)的類,現(xiàn)舉一個(gè)簡(jiǎn)單例子說(shuō)明。比如下面的代碼,封裝了對(duì)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. ?>

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

     
     
     
     
    1. {email_safe($string)}

    下圖為輸出結(jié)果:

    而另外一種使用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的自動(dòng)加載機(jī)制會(huì)自動(dòng)加載這個(gè)插件,而不用每次使用時(shí)都使用addplugin的功能。

    #p#

    四、DWOO的過(guò)濾器

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

     
     
     
     
    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. ?>

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

    同樣,也可以這樣寫(xiě):

     
     
     
     
    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會(huì)自動(dòng)加載。

    #p#

    五、DWOO中的緩存

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

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

    2. 在isCached()方法中,編寫(xiě)相關(guān)的模版生成代碼,并且當(dāng)緩存存在的時(shí)候,直接返回緩存中的頁(yè)面。

    下面舉一個(gè)搜索Twitter中信息的例子來(lái)說(shuō)明如何使用緩存:

     
     
     
     
    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)容。接下來(lá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)合成好的頁(yè)面文件顯示給用戶,否則的話調(diào)用twitter的Atom公開(kāi)API接口去查詢關(guān)鍵字pasta,再輸出到頁(yè)面。輸出結(jié)果如下圖:

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


    新聞名稱:PHP開(kāi)發(fā)必備PHP模版引擎Dwoo深入學(xué)習(xí)
    URL標(biāo)題:http://www.dlmjj.cn/article/dpcposc.html