欢迎来到欣怡建站!我们致力于提供优质的网站建站服务
注册

dedecms模板原理,实现标签替换

相关案例演示

正则匹配出所有的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'];

 

   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=http://www.dede58.com/a/dedejq/"[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);

 

       /**

作者:欣怡建站 挑错 时间:2020-02-10 08:37
首先声明,只要是我们的vip会员所有源码均可以免费下载,不做任何限制
☉本站的源码不会像其它下载站一样植入大量的广告。为了更好的用户体验以后坚持不打水印
☉本站只提供精品源码,源码在于可用,不在多!!希望在这里找到你合适的。
☉本站提供的整站程序,均带数据及演示地址。可以在任一源码详情页查看演示地址
☉本站所有资源(包括源码、模板、素材、特效等)仅供学习与参考,请勿用于商业用途。
☉如有其他问题,请加网站客服QQ(984818011)进行交流。
相关教程
在线客服