Dedecms从V5.3开始就支持自己扩展标签,不过许多新人很少用那个东西,简单的介绍下如何编写自己的调用标签。@H_404_9@ 我们需要知道下扩展标签的存放目录及文件名构成,首先,扩展的标签都是存放在/include/taglib这个目录,名称都是以“标签名.lib.PHP”格式,例如{dede:channel/}标签对应的是channel.lib.PHP文件。@H_404_9@ 我们可以看一个示例标签:demotag.lib.PHP
if(!defined('DEDEINC')) { exit("Request Error!"); } function lib_demotag(&$ctag,&$refObj) global $dsql,$envs; // 属性处理 $attlist="row|12,titlelen|24"; FillAttsDefault($ctag->CAttribute->Items,$attlist); extract($ctag->CAttribute->Items,EXTR_SKIP); $revalue = ''; // 你需编写的代码,不能用 echo 之类语法,把最终返回值传给 $revalue //------------------------------------------------------ $revalue = 'Hello Word!'; return $revalue; ?>
@H_404_9@ 我们登录系统后台的[模板]-[全局标签测试]中运行{dede:demotag/},显示如下的结果:@H_404_9@ ,我们会发现标签起作用了,输出了我们的内容。@H_404_9@ @H_404_9@ 至此我们完成了标签的编写,这里面主要涉及到PHP、MysqL的很多知识,需要有一定相关方面的基础才能够编写标签了,当然这里只是一个简单的标签开发例子,还有许多的东西可以去开发。@H_404_9@
$revalue .=" Row:".$row.";TitleLen:".$titlelen;
@H_404_9@
function lib_writerarc(&$ctag,&$refObj)
接下来我们就可以编写查询语句及对底层模板处理的相关函数了@H_404_9@
$innertext = $ctag->GetInnerText(); $ctp = new DedeTagParse(); $ctp->SetNameSpace('field','[',']'); $sql = "SELECT * FROM dede_archives WHERE writer='{$refObj->Fields['writer']}' limit 0,$row";
$innertext这个是用来获取标签的底层模板的,$ctp创建用于处理底层模板中的变量,并处理进行替换。我们根据获取的属性编写我们的sql语句,这里我们使用limit 0,$row,这样就可以根据$row来确定查询的内容数目。@H_404_9@ 当然我们可以获取更多的属性以便我们这个标签更强大,例如我们可以增加类似于arclist中的相关属性,并在函数中进行处理,不过这个需要有一定的PHP基础。@H_404_9@ 接下来我们通过执行查询对sql及输出变量进行处理:@H_404_9@
$dsql->Execute('me',$sql); while($rs = $dsql->GetArray('me')) // 根据属性处理查询变量 $rs['title'] = cn_substr($rs['title'],$titlelen); // 获取底层模板 $ctp->LoadSource($innertext); foreach($ctp->CTags as $tagid=>$ctag) { if(!empty($rs[strtolower($ctag->GetName())])) { $ctp->Assign($tagid,$rs[$ctag->GetName()]); // 根据底层模板及查询变量得到处理结果 $revalue .= $ctp->GetResult(); }
这样我们就将查询出来的结果同底层模板中出现的相关变量进行替换,然后生成输出字符串,将所有的字符串信息存储到$revalue中。@H_404_9@ 最后返回这个值return $revalue;@H_404_9@ 接下来我们来测试我们这个标签,我们修改article_article.htm模板,在里面加入以下的标签代码:@H_404_9@
{dede:writerarc row='10' titlelen='6'} [field:title/] {/dede:writerarc}
通过动态浏览页面进行查看调试http://www.dedecms.com/plus/view.php?aid=3@H_404_9@
至此我们完成了标签的编写,这里面主要涉及到PHP、MysqL的很多知识,需要有一定相关方面的基础才能够编写标签了,当然这里只是一个简单的标签开发例子,还有许多的东西可以去开发。