久久机这里只有精品,国产69精品一区二区亚洲孕妇,91精品国产综合久久婷婷香蕉,午夜久久久久久电影

最新活動:電腦PC端+手機端+微網站+自適應網頁多模板選擇-建站388元起價!??!
當前位置:主頁 > 網站建設 > dedecms模板原理,實現標簽替換,dedecms

dedecms模板原理,實現標簽替換,dedecms

時間:2023-07-18 10:07:18 閱讀: 文章分類: 網站建設 作者: 織夢網站員

導讀:dedecmsdedecms正則匹配出所有的arclist標簽并構造SQL 取出數據并替換field為相應字段的數據 為field標簽添加一個function屬性 ?php require織夢的模板織夢網站模板。

織夢的模板織夢網站模板

正則匹配出所有的arclist標簽并構造SQL

取出數據并替換field為相應字段的數據

為field標簽添加一個function屬性  

<?php require_once(dirname(__FILE__)."/../include/common.inc.php"); //1. 讀入模板文件 $str = file_get_contents('test.html'); //2. 使用正則匹配出頁面中所有的 arclist 標簽 $re = '/{dede:arclist(.*)}(.*){\/dede:arclist}/Us'; // 執行正則匹配 // 第一個參數:正則  // 第二個參數:字符串 // 第三個參數:這個函數會把匹配到的結果放第三個參數的數組中 // 返回值:匹配到的個數 preg_match_all($re, $str, $a); //3. 循環每一個匹配到的arclist標簽進行處理  foreach ($a[0] as $k => $v) {     /****************處理標簽1.根據標簽上的屬性構造一個SQL語句 **************/     // 取出標簽相應的屬性字織夢的模板符串并把屬性轉化成一個數組,如 row="10" channelid="17" addfields="pffz,pfrs,yuyan" orderby="id" orderway="desc"     $attrArr = strToArray($a[1][$k]);     // 根據構造構造SQL語句上的變量     if(isset($attrArr['row']))         $limit = $attrArr['row']; dede58模板     else         $limit = 20;     if(isset($attrArr['orderby']))         $orderby = $attrArr['orderby'];     else         $orderby = 'id';     if(isset($attrArr['orderway']))         $orderway = $attrArr['orderway'];     else         $orderway = 'desc';     // 連表的屬性     if(isset($attrArr['channelid']))         $leftJoin = ' LEFT JOIN dede_addon17 b ON a.id=b.aid ';     else         $leftJoin = '';     if(isset($attrArr['addfields']))         $extraFields = ','.$attrArr['addfields'];     else         $extraFields = '';     // 解析屬性          $sql = "SELECT a.*$extraFields             FROM dede_archives a $leftJoin              ORDER BY $orderby $orderway              LIMIT $limit";     $dsql->Execute('me', $sql);     $html = '';     // 每個arclist對應的多個數據     while($row = $dsql->GetArray('me'))     {         // 重置模板字符串,不要在原模板上面進行替換         $_tep = $a[2][$k];         /**         <li>             <img src="[field:litpic/]" /><br />              標題:[field:title/]<br />              評分分值:[field:pffz    function="getSmallStar(@me)"/]<br />              評分人數:[field:pfrs/]<br />              語言:[field:yuyan/]         </li>     **/         // 把字符串中的[field:xxxx/]替換成$row['xxxx']變量。         $_re = '/\[field:(\w+)(\s+function=("|\')(\w+)\((.*)\)\3)?\/\]/U';         preg_match_all($_re, $_tep, $_a);         /** array   0 =>      array       0 => string '[field:litpic/]' (length=15)       1 => string '[field:title/]' (length=14)       2 => string '[field:pffz/]' (length=13)       3 => string '[field:pfrs/]' (length=13)       4 => string '[field:yuyan/]' (length=14)   1 =>      array       0 => string 'litpic' (length=6)       1 => string 'title' (length=5)       2 => string 'pffz' (length=4)       3 => string 'pfrs' (length=4)       4 => string 'yuyan' (length=5)      */      // 再循環每一條 記錄中的每個字段的值         foreach($_a[0] as $_k => $_v)         {             if($_a[4][$_k] == '')                 // 把[field:xxx/]字符串替換成相應的$row[xxx]變量                 $_tep = str_replace($_v, $row[$_a[1][$_k]], $_tep);             else             {                 // 如果參數中有@me就把@me替換成當前這個字段的織夢文章模板數據庫中的值                 $_a[5][$_k] = str_replace('@me', $row[$_a[1][$_k]], $_a[5][$_k]);                 // 如果有函數就調用函數                 $funStr = '$_val='.$_a[4][$_k]."({$_a[5][$_k]});";                 eval($funStr);                 $_tep = str_replace($_v, $_val, $_tep);             }         }         $html .= $_tep;     }     // 到這arclist標簽就已經都解析成了相應的數據,把整個arclist標簽替換成解析之后的數據,$html就是 arclist最終解析完成之后的HTML的字符串     $str = str_replace($v, $html, $str);     // 一個arclist就解析完成了 } // 把解析好的字符串生成前臺靜態頁 file_put_contents('./index.html', $str); echo '解析成功!';         function strToArray($str) {     $str = trim($str);     // 從屬性字符串中匹配出每個屬性,格式如:row="10" channelid="17" addfields="pffz,pfrs,yuyan" orderby="id" orderway="desc"     $re = '/[a-z]+\s*=\s*("|\').*\1/U';     $data = array();     preg_match_all($re, $str, $a);     foreach ($a[0] as $k => $v)     {         $_a = explode('=', $v);         // 去掉屬性值左右的引號,屬性左右的引號是單引號還是雙引號不能確定所以需要使用$a[1][$k]變量來代替,這個變量是正則中 的第一個括號的內容,匹配的就是引號         $_a[1] = ltrim($_a[1], $a[1][$k]);         $_a[1] = rtrim($_a[1], $a[1][$k]);         $data[$_a[0]] = $_a[1];     }     return $data;

關鍵詞標簽: 標簽 dedecms 原理

聲明: 本文由我的SEOUC技術文章主頁發布于:2023-07-18 ,文章dedecms模板原理,實現標簽替換,dedecms主要講述標簽,原理,dedecms網站建設源碼以及服務器配置搭建相關技術文章。轉載請保留鏈接: http://www.bifwcx.com/article/web_29607.html

我的IDC 網站建設技術SEOUC.COM
專注網站建設,SEO優化,小程序設計制作搭建開發定制網站等,數千家網站定制開發案例,網站推廣技術服務。
  • 5000+合作客服
  • 8年從業經驗
  • 150+覆蓋行業
  • 最新熱門源碼技術文章

    主站蜘蛛池模板: 丹棱县| 奈曼旗| 河源市| 萝北县| 二手房| 宜川县| 马龙县| 昭平县| 双鸭山市| 潍坊市| 汾阳市| 深泽县| 改则县| 辽源市| 越西县| 津南区| 仪征市| 阿鲁科尔沁旗| 济南市| 舞阳县| 平利县| 淳化县| 赣州市| 福鼎市| 兴国县| 阜宁县| 高阳县| 承德县| 内丘县| 新晃| 岫岩| 湟源县| 越西县| 辰溪县| 长岛县| 吉木乃县| 遂平县| 平谷区| 桃源县| 平顺县| 光山县|