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

  文章介绍

   $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];

  /**

  

  •   

      标题:[field:title/]

      评分分值:[field:pffz function=”getSmallStar(@me)”/]

      评分人数:[field:pfrs/]

      语言:[field:yuyan/]

      

  •   **/

      // 把字符串中的[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(‘https://www.adminbuy.cn/dedecmsjc/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;

      }

       $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];

      /**

      

  •   

      标题:[field:title/]

      评分分值:[field:pffz function=”getSmallStar(@me)”/]

      评分人数:[field:pfrs/]

      语言:[field:yuyan/]

      

  •   **/

      // 把字符串中的[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(‘https://www.adminbuy.cn/dedecmsjc/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;

      }

       $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];

      /**

      

  •   

      标题:[field:title/]

      评分分值:[field:pffz function=”getSmallStar(@me)”/]

      评分人数:[field:pfrs/]

      语言:[field:yuyan/]

      

  •   **/

      // 把字符串中的[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(‘https://www.adminbuy.cn/dedecmsjc/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;

      }

    ☉免责声明:本站所有模板均来自用户分享和网络收集,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服,我们核实后会立即删除。
    ☉本站提供的源码、模板、软件工具等其他资源,都不包含技术服务,请大家谅解!
    pbootcms模板网 » dedecms模板原理,实现标签替换

    Pbootcms模板网 提供优质的模板集合

    立即查看 了解详情