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);
/**
☉本站的源码不会像其它下载站一样植入大量的广告。为了更好的用户体验以后坚持不打水印
☉本站只提供精品源码,源码在于可用,不在多!!希望在这里找到你合适的。
☉本站提供的整站程序,均带数据及演示地址。可以在任一源码详情页查看演示地址
☉本站所有资源(包括源码、模板、素材、特效等)仅供学习与参考,请勿用于商业用途。
☉如有其他问题,请加网站客服QQ(984818011)进行交流。
- 织梦dede首页列表页获取文章对应的tag标签
- 织梦dede导航栏目顶级和二级判断二级输出不同url
- 织梦dede标签array runphp静态生成乱码BUG解决方法
- 织梦dede如何禁止会员发布文章内容带超链接
- 织梦ajax跨域提交自定义表单和跨域验证码问题
- 织梦CMS MIP文章内容页图片适配百度MIP规范
- 织梦CMS时间格式实现XX秒前、XX分钟前、XX天前
- 织梦DedeCMS更新系统缓存增加清理沉余缓存的功能
- 织梦CMS让channelartlist标签支持currentstyle属性的
- 织梦dede自带编辑器替换百度ueditor编辑器
- 织梦DEDECMS整站动态化或整站静态化设置方法
- 织梦dede 模板路径templets目录都有什么?