午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    DEDECMS 擴展標簽和dede自定義標簽實現(xiàn)方法
    來源:易賢網(wǎng) 閱讀:753 次 日期:2014-09-24 11:24:06
    溫馨提示:易賢網(wǎng)小編為您整理了“DEDECMS 擴展標簽和dede自定義標簽實現(xiàn)方法”,方便廣大網(wǎng)友查閱!

    我們需要知道下擴展標簽的存放目錄及文件名構(gòu)成,首先,擴展的標簽都是存放在/include/taglib這個目錄,名稱都是以“標簽名.lib.php”格式,例如{dede:channel/}標簽對應的是channel.lib.php文件。

      我們可以看一個示例標簽:demotag.lib.php

      

    代碼如下:

      if(!defined('DEDEINC'))

      {

      exit("Request Error!");

      }

      function lib_demotag(&$ctag,&$refObj)

      {

      global $dsql,$envs;

      //屬性處理

      $attlist="row|12,titlelen|24";

      FillAttsDefault($ctag->CAttribute->Items,$attlist);

      extract($ctag->CAttribute->Items, EXTR_SKIP);

      $revalue = '';

      //你需編寫的代碼,不能用echo之類語法,把最終返回值傳給$revalue

      //------------------------------------------------------

      $revalue = 'Hello Word!';

      //------------------------------------------------------

      return $revalue;

      }

      ?>

      我們登錄系統(tǒng)后臺的[模板]-[全局標簽測試]中運行{dede:demotag/},顯示如下的結(jié)果:

    ,我們會發(fā)現(xiàn)標簽起作用了,輸出了我們的內(nèi)容。

      至此我們完成了標簽的編寫,這里面主要涉及到PHP、MySQL的很多知識,需要有一定相關方面的基礎才能夠編寫標簽了,當然這里只是一個簡單的標簽開發(fā)例子,還有許多的東西可以去開發(fā)。

      這里我們知道,其實標簽生成的內(nèi)容其實是這個函數(shù)的一個返回值,這里返回的內(nèi)容都是字符串,也就是函數(shù)return $revalue;中的$revalue需要是經(jīng)過處理后生成的字符串。

      $attlist="row|12,titlelen|24";這個是屬性列表,這個經(jīng)過函數(shù)處理后會直接生成變量并復制,我們可以測試下,做如下的修改:

    代碼如下:

      $revalue = 'Hello Word!';

      $revalue .="

    Row:".$row.";TitleLen:".$titlelen;

      這樣我們可以看到,這個屬性已經(jīng)被創(chuàng)建變量并且賦值了。

      接下來我們可以再進一步去修改這個標簽。

      比如說我們需要寫一個標簽專門來查詢文章內(nèi)容頁的那個相關文章,功能類似于上面sql標簽中的那個sql,只是這里我們將其分裝為一個標簽。

      我們可以新建一個標簽,例如叫writerarc,那我們就需要創(chuàng)建一個writerarc.lib.php,然后模仿demotag編寫函數(shù),注意需要修改為

      function lib_writerarc(&$ctag,&$refObj)

      接下來我們就可以編寫查詢語句及對底層模板處理的相關函數(shù)了

    代碼如下:

      $revalue = '';

      $innertext = $ctag->GetInnerText();

      $ctp = new DedeTagParse();

      $ctp->SetNameSpace('field', '[', ']');

      $sql = "SELECT * FROM dede_archives WHERE writer='{$refObj->Fields['writer']}' limit 0, $row";

      $innertext這個是用來獲取標簽的底層模板的,$ctp創(chuàng)建用于處理底層模板中的變量,并處理進行替換。我們根據(jù)獲取的屬性編寫我們的sql語句,這里我們使用limit 0, $row,這樣就可以根據(jù)$row來確定查詢的內(nèi)容數(shù)目。

      當然我們可以獲取更多的屬性以便我們這個標簽更強大,例如我們可以增加類似于arclist中的相關屬性,并在函數(shù)中進行處理,不過這個需要有一定的PHP基礎。

      接下來我們通過執(zhí)行查詢對sql及輸出變量進行處理:

    代碼如下:

      $dsql->Execute('me',$sql);

      while($rs = $dsql->GetArray('me'))

      {

      //根據(jù)屬性處理查詢變量

      $rs['title'] = cn_substr($rs['title'], $titlelen);

      //獲取底層模板

      $ctp->LoadSource($innertext);

      foreach($ctp->CTags as $tagid=>$ctag) {

      if(!empty($rs[strtolower($ctag->GetName())])) {

      $ctp->Assign($tagid,$rs[$ctag->GetName()]);

      }

      }

      //根據(jù)底層模板及查詢變量得到處理結(jié)果

      $revalue .= $ctp->GetResult();

      }

      這樣我們就將查詢出來的結(jié)果同底層模板中出現(xiàn)的相關變量進行替換,然后生成輸出字符串,將所有的字符串信息存儲到$revalue中。

      最后返回這個值return $revalue;

      整個文件內(nèi)容如下:

    代碼如下:

      if(!defined('DEDEINC'))

      {

      exit("Request Error!");

      }

      function lib_writerarc(&$ctag,&$refObj)

      {

      global $dsql,$envs;

      //屬性處理

      $attlist="row|12,titlelen|24";

      FillAttsDefault($ctag->CAttribute->Items,$attlist);

      extract($ctag->CAttribute->Items, EXTR_SKIP);

      $revalue = '';

      $innertext = $ctag->GetInnerText();

      $ctp = new DedeTagParse();

      $ctp->SetNameSpace('field', '[', ']');

      $sql = "SELECT * FROM dede_archives WHERE writer='{$refObj->Fields['writer']}' limit 0, $row";

      $dsql->Execute('me',$sql);

      while($rs = $dsql->GetArray('me'))

      {

      //根據(jù)屬性處理查詢變量

      $rs['title'] = cn_substr($rs['title'], $titlelen);

      //獲取底層模板

      $ctp->LoadSource($innertext);

      foreach($ctp->CTags as $tagid=>$ctag) {

      if(!empty($rs[strtolower($ctag->GetName())])) {

      $ctp->Assign($tagid,$rs[$ctag->GetName()]);

      }

      }

      //根據(jù)底層模板及查詢變量得到處理結(jié)果

      $revalue .= $ctp->GetResult();

      }

      return $revalue;

      }

      ?>

      接下來我們來測試我們這個標簽,我們修改article_article.htm模板,在里面加入以下的標簽代碼:

      {dede:writerarc row='10' titlelen='6'}

      [field:title/]

      {/dede:writerarc}

    更多信息請查看IT技術專欄

    更多信息請查看CMS教程
    易賢網(wǎng)手機網(wǎng)站地址:DEDECMS 擴展標簽和dede自定義標簽實現(xiàn)方法
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢?yōu)闇剩?/div>
    相關閱讀CMS教程

    2025國考·省考課程試聽報名

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網(wǎng)