首页 > CMS > 织梦DEDE > 正文

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

2024-07-12 08:34:41
字体:
来源:转载
供稿:网友
正则匹配出所有的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="[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);          /**  
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表