• <ul id="cgeq2"></ul>
  • 歡迎您光臨深圳塔燈網絡科技有限公司!
    電話圖標 余先生:13699882642

    dede擴展標簽及自定義標簽

    發表日期:2017-11 文章編輯:小燈 瀏覽次數:1661

    DedeCMSV5.3開始就支持自己擴展標簽,不過許多新人很少用那個東西,簡單的介紹下如何編寫自己的調用標簽。
      我們需要知道下擴展標簽的存放目錄及文件名構成,首先,擴展的標簽都是存放在/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;
      }
      ?>
      我們登錄系統后臺的[模板]-[全局標簽測試]中運行{dede:demotag/},顯示如下的結果:
    ,我們會發現標簽起作用了,輸出了我們的內容。

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

      這里我們知道,其實標簽生成的內容其實是這個函數的一個返回值,這里返回的內容都是字符串,也就是函數return $revalue;中的$revalue需要是經過處理后生成的字符串。
      $attlist="row|12,titlelen|24";這個是屬性列表,這個經過函數處理后會直接生成變量并復制,我們可以測試下,做如下的修改:
      $revalue = 'Hello Word!';
      $revalue .="
    Row:".$row.";TitleLen:".$titlelen;

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

      {/dede:writerarc}
    本頁內容由塔燈網絡科技有限公司通過網絡收集編輯所得,所有資料僅供用戶參考了本站不擁有所有權,如您認為本網頁中由涉嫌抄襲的內容,請及時與我們聯系,并提供相關證據,工作人員會在5工作日內聯系您,一經查實,本站立刻刪除侵權內容。本文鏈接:http://www.juherenli.com/11706.html
    相關cms文章
     八年  行業經驗

    多一份參考,總有益處

    聯系深圳網站公司塔燈網絡,免費獲得網站建設方案及報價

    咨詢相關問題或預約面談,可以通過以下方式與我們聯系

    業務熱線:余經理:13699882642

    Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.    

    精品女同一区二区| 亚洲国产精品综合一区在线| 国产成人精品三级在线| 国产日韩精品无码区免费专区国产| 精品国际久久久久999波多野| 亚洲?V无码成人精品区日韩| 精品国产天线2019| 精品少妇一区二区三区视频| 国产精品天天在线午夜更新| 91精品手机国产免费| 国产精品 码ls字幕影视| 欧美激情国产精品视频一区二区| 久久亚洲精品无码| 国产精品永久久久久久久久久| 亚洲Av永久无码精品黑人| 亚洲嫩草影院久久精品| 久久人搡人人玩人妻精品首页 | 久久无码人妻精品一区二区三区| 国产精品亚洲精品久久精品| 99久热只有精品视频免费观看17| 国产亚洲精品无码拍拍拍色欲| 国产精品自拍电影| www.国产精品.com| 91国语精品自产拍在线观看一| 一本一本久久A久久综合精品| 国产av无码久久精品| 人妻少妇精品视频三区二区一区| 精品熟女少妇av免费久久| 免费91麻豆精品国产自产在线观看| 国产精品自产拍高潮在线观看| 国产精品一区二区综合| 国产伦精品一区二区三区不卡| 国产精品久久一区二区三区| 日本伊人精品一区二区三区| 国产亚洲一区二区精品| 久久精品女人天堂AV麻| 国产精品无码无卡无需播放器| 精品一区二区三区水蜜桃| 最新国产精品好看的国产精品| 久久久精品人妻久久影视| 国产精品久久久久蜜芽|