dede擴展標簽及自定義標簽

4年前 (2021-01-02)閱讀901回復0
弘以藍
弘以藍
  • 管理員
  • 發(fā)消息
  • 注冊排名2519
  • 經(jīng)驗值45
  • 級別管理員
  • 主題9
  • 回復0
樓主
印刷廠(chǎng)直印加工●彩頁(yè)1000張只需要69元●名片5元每盒-更多產(chǎn)品印刷報價(jià)?聯(lián)系電話(huà):138-1621-1622(微信同號)

  DedeCMS從V5.3開(kāi)始就支持自己擴展標簽,不過(guò)許多新人很少用那個(gè)東西,簡(jiǎn)單的介紹下如何編寫(xiě)自己的調用標簽。

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

  我們可以看一個(gè)示例標簽: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 = '';

  //你需編寫(xiě)的代碼,不能用echo之類(lèi)語(yǔ)法,把最終返回值傳給$revalue

  $revalue = 'Hello Word!';

  return $revalue;

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

  ,我們會(huì )發(fā)現標簽起作用了,輸出了我們的內容。

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

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

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

  $revalue = 'Hello Word!';

  $revalue .="

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

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

  接下來(lái)我們可以再進(jìn)一步去修改這個(gè)標簽。

  比如說(shuō)我們需要寫(xiě)一個(gè)標簽專(zhuān)門(mén)來(lái)查詢(xún)文章內容頁(yè)的那個(gè)相關(guān)文章,功能類(lèi)似于上面sql標簽中的那個(gè)sql,只是這里我們將其分裝為一個(gè)標簽。

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

  function lib_writerarc(;$ctag,;$refObj)

  接下來(lái)我們就可以編寫(xiě)查詢(xún)語(yǔ)句及對底層模板處理的相關(guān)函數了

  $revalue = '';

  $innertext = $ctag-;GetInnerText();

  $ctp = new DedeTagParse();

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

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

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

  當然我們可以獲取更多的屬性以便我們這個(gè)標簽更強大,例如我們可以增加類(lèi)似于arclist中的相關(guān)屬性,并在函數中進(jìn)行處理,不過(guò)這個(gè)需要有一定的PHP基礎。

  接下來(lái)我們通過(guò)執行查詢(xún)對sql及輸出變量進(jìn)行處理:

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

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

  //根據屬性處理查詢(xún)變量

  $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()]);

  //根據底層模板及查詢(xún)變量得到處理結果

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

  這樣我們就將查詢(xún)出來(lái)的結果同底層模板中出現的相關(guān)變量進(jìn)行替換,然后生成輸出字符串,將所有的字符串信息存儲到$revalue中。

  最后返回這個(gè)值return $revalue;

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

  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'))

  //根據屬性處理查詢(xún)變量

  $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()]);

  //根據底層模板及查詢(xún)變量得到處理結果

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

  return $revalue;

  接下來(lái)我們來(lái)測試我們這個(gè)標簽,我們修改article_article.htm模板,在里面加入以下的標簽代碼:

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

  [field:title/]

  {/dede:writerarc}

  更多了解關(guān)注我主頁(yè)網(wǎng)址!

0
0
收藏0
回帖

dede擴展標簽及自定義標簽 期待您的回復!

取消
載入表情清單……
載入顏色清單……
插入網(wǎng)絡(luò )圖片

取消確定

圖片上傳中
編輯器信息
提示信息