dede 官方论坛不允许新注册用户发帖 ...
这样的 , 这么一串 html 代码
{dede:arclist flag='h' limit='0,1' infolen='230'}
[field:title/]
[field:info/]...[查看全文]
{/dede:arclist}
这么一段代码 , 对应 taglib/arclist.lib.php
中我看到解
[field:title/]
[field:info/]...[查看全文]
这么一段代码 , 也就是 arclist 标签的 innertext 的解法是这样的 .
arclist.lib.php line 472-474
$dtp2 = new dedetagparse();
$dtp2->setnamespace('field', '[', ']');
$dtp2->loadstring($innertext);
这个 dedetagparse() 这个我可以理解 , 它首先根据 setnamespace 设置好 tagstartword 和 endword , 而后根据这些东西使用 for 循环整个字符串 , 其中使用 strpos 对比匹配出标签 , 并将标签全部存于类数组 ctags 中 .
随后调用 makeonetag 方法让那些 taglib 下面存在文件的方法获取 tagvalue .
而后再使用 getresult 方法将值按照解析式 strpos 的位置插入 html 中随后返回完整字符串 .
这个过程好理解 , 但不好理解的事
$dtp2->setnamespace('field', '[', ']');
makeonetag 中 taglib 下没有 filed.lib.php , 并且 , assignsystag 中也没有 field 的解析 .
而且 , 这里不会走到 makeonetag , 我想问的是 , 它是怎么解析到值的 ? 非常非常感谢 !!!!
------解决方案--------------------
$dtp2->setnamespace('field', '[', ']');
field 字段
[ 开弧
] 闭弧
用数据表字段内容去替代模板中用[]括起的模板变量
