花魁直播高品质美女在线视频互动社区 - 花魁直播官方版

 歡迎來(lái)到素材無(wú)憂(yōu)網(wǎng),按 + 收藏我們
登錄 注冊(cè) 退出 找回密碼

dede擴(kuò)展標(biāo)簽及自定義標(biāo)簽

時(shí)間: 2018-12-12 08:24 閱讀: 作者:素材無(wú)憂(yōu)網(wǎng)

DedeCMSV5.3開(kāi)始就支持自己擴(kuò)展標(biāo)簽,不過(guò)許多新人很少用那個(gè)東西,簡(jiǎn)單的介紹下如何編寫(xiě)自己的調(diào)用標(biāo)簽。
  我們需要知道下擴(kuò)展標(biāo)簽的存放目錄及文件名構(gòu)成,首先,擴(kuò)展的標(biāo)簽都是存放在/include/taglib這個(gè)目錄,名稱(chēng)都是以標(biāo)簽名.lib.php”格式,例如{dede:channel/}標(biāo)簽對(duì)應(yīng)的是channel.lib.php文件。
  我們可以看一個(gè)示例標(biāo)簽: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;
  }
  ?>
  我們登錄系統(tǒng)后臺(tái)的[模板]-[全局標(biāo)簽測(cè)試]中運(yùn)行{dede:demotag/},顯示如下的結(jié)果:
,我們會(huì)發(fā)現(xiàn)標(biāo)簽起作用了,輸出了我們的內(nèi)容。

  至此我們完成了標(biāo)簽的編寫(xiě),這里面主要涉及到PHP、MySQL的很多知識(shí),需要有一定相關(guān)方面的基礎(chǔ)才能夠編寫(xiě)標(biāo)簽了,當(dāng)然這里只是一個(gè)簡(jiǎn)單的標(biāo)簽開(kāi)發(fā)例子,還有許多的東西可以去開(kāi)發(fā)。 dede擴(kuò)展標(biāo)簽及自定義標(biāo)簽(圖1)

  這里我們知道,其實(shí)標(biāo)簽生成的內(nèi)容其實(shí)是這個(gè)函數(shù)的一個(gè)返回值,這里返回的內(nèi)容都是字符串,也就是函數(shù)return $revalue;中的$revalue需要是經(jīng)過(guò)處理后生成的字符串。
  $attlist="row|12,titlelen|24";這個(gè)是屬性列表,這個(gè)經(jīng)過(guò)函數(shù)處理后會(huì)直接生成變量并復(fù)制,我們可以測(cè)試下,做如下的修改:
  $revalue = 'Hello Word!';
  $revalue .="
Row:".$row.";TitleLen:".$titlelen; dede擴(kuò)展標(biāo)簽及自定義標(biāo)簽(圖2)

  這樣我們可以看到,這個(gè)屬性已經(jīng)被創(chuàng)建變量并且賦值了。
  接下來(lái)我們可以再進(jìn)一步去修改這個(gè)標(biāo)簽。
  比如說(shuō)我們需要寫(xiě)一個(gè)標(biāo)簽專(zhuān)門(mén)來(lái)查詢(xún)文章內(nèi)容頁(yè)的那個(gè)相關(guān)文章,功能類(lèi)似于上面sql標(biāo)簽中的那個(gè)sql,只是這里我們將其分裝為一個(gè)標(biāo)簽。
  我們可以新建一個(gè)標(biāo)簽,例如叫writerarc,那我們就需要?jiǎng)?chuàng)建一個(gè)writerarc.lib.php,然后模仿demotag編寫(xiě)函數(shù),注意需要修改為
  function lib_writerarc(&$ctag,&$refObj)
  接下來(lái)我們就可以編寫(xiě)查詢(xún)語(yǔ)句及對(duì)底層模板處理的相關(guān)函數(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這個(gè)是用來(lái)獲取標(biāo)簽的底層模板的,$ctp創(chuàng)建用于處理底層模板中的變量,并處理進(jìn)行替換。我們根據(jù)獲取的屬性編寫(xiě)我們的sql語(yǔ)句,這里我們使用limit 0, $row,這樣就可以根據(jù)$row來(lái)確定查詢(xún)的內(nèi)容數(shù)目。
  當(dāng)然我們可以獲取更多的屬性以便我們這個(gè)標(biāo)簽更強(qiáng)大,例如我們可以增加類(lèi)似于arclist中的相關(guān)屬性,并在函數(shù)中進(jìn)行處理,不過(guò)這個(gè)需要有一定的PHP基礎(chǔ)。
  接下來(lái)我們通過(guò)執(zhí)行查詢(xún)對(duì)sql及輸出變量進(jìn)行處理:
  $dsql->Execute('me',$sql);
  while($rs = $dsql->GetArray('me'))
  {
  //根據(jù)屬性處理查詢(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()]);
  }
  }
  //根據(jù)底層模板及查詢(xún)變量得到處理結(jié)果
  $revalue .= $ctp->GetResult();
  }
  這樣我們就將查詢(xún)出來(lái)的結(jié)果同底層模板中出現(xiàn)的相關(guān)變量進(jìn)行替換,然后生成輸出字符串,將所有的字符串信息存儲(chǔ)到$revalue中。
  最后返回這個(gè)值return $revalue;
  整個(gè)文件內(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ù)屬性處理查詢(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()]);
  }
  }
  //根據(jù)底層模板及查詢(xún)變量得到處理結(jié)果
  $revalue .= $ctp->GetResult();
  }
  return $revalue;
  }
  ?>
  接下來(lái)我們來(lái)測(cè)試我們這個(gè)標(biāo)簽,我們修改article_article.htm模板,在里面加入以下的標(biāo)簽代碼:
  {dede:writerarc row='10' titlelen='6'}
  [field:title/]

  {/dede:writerarc}

版權(quán)聲明: 本站資源均來(lái)自互聯(lián)網(wǎng)或會(huì)員發(fā)布,如果侵犯了您的權(quán)益請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)刪除!謝謝!

轉(zhuǎn)載請(qǐng)注明: dede擴(kuò)展標(biāo)簽及自定義標(biāo)簽

標(biāo)簽:  
相關(guān)文章
模板推薦