DEDECMS 扩展标签和dede自定义标签实现方法

DEDECMS 扩展标签和dede自定义标签实现方法,第1张

DEDECMS扩展标签和dede自定义标签实现方法

DedeCMS从V5.3开始就应用了自己的扩展标签,但是很多新人很少用。本文简要介绍了如何编写自己的使能标签。

您必须知道扩展标记的文件目录和文件夹名称。首先,扩展标记都存储在文件目录/include/taglib中,名称都是“tagname.lib.php”格式。例如,{dede:channel/}标签匹配channel.lib.php文件。
可以看一个实例标签:demotag.lib.php


复制以下代码:
if(!defined('DEDEINC')
{
exit("请求错误!");
}
函数lib_demotag(&;$ctag&;$refobj)
{
global$dsql,$envs
//功能解决方案
$attlist="row|12,titlelen|24";
FillAttsDefault($ctag->;属性->;Items,$attlist);
提取($ctag->;属性->;Items,EXTR_SKIP);
$revue=“”;
//对于需要写的代码,不能像echo一样使用英语语法,将最终返回值发送给$revalue
/-;
///-
return$revue;
}
?>

大家登录系统后台管理中的[模板]-[全局标签检测]进行 *** 作{dede:demotag/},会显示以下结果:
,你会发现标签已经起作用,输出你的内容。

至此,大家都写完了标签。这里的关键涉及到很多PHP和MySQL的专业知识,你必须有一定的基础知识水平才能写标签。自然,这里只是简单的标签开发设计的例子,也有很多可以开发设计的项目。

我们在这里知道,其实标签形成的内容其实就是这个函数的一个返回值,这里返回的所有内容都是字符串数组,也就是函数return$revalue中的$revalue必须是求解后形成的字符串数组。
$attlist="row|12,titlelen|24";这是特征目录,自变量会在函数求解后立即形成并复制。我们可以检查它并进行以下更改:


复制下面的代码:
$revalue='HelloWord!';
$重估。="
Row:"。$row。";TitleLen:“。$titlelen

这样,我们可以看到,这个特征已经被确立为一个独立变量,它的值已经被取了。
接下来,我们可以进一步改变这个标签。
比如你要写一个labelspecialty来查看文章页面上的哪篇相关文章,它的作用类似于上面sql标签中的哪条sql,但是这里你把它批量化为一个标签。
我们可以创建一个新的标签,例如,名为writerarc。那么我们必须建立一个writerarc.lib.php,然后效仿demotag写一个函数号。注意,必须将其更改为
函数Lib_WriterArc(&$ctag,&$refObj)
接下来可以写查看句子和求解最低模板的相关函数了。


复制下面的代码:
$revalue='';
$innertext=$ctag->;GetInnerText();
$CTP=newDedeTagParse();
$CTP->;SetNameSpace('field','[',']');
$SQL="SELECT*FROMdede_archivesWHEREwriter='{$refobj->;Fields['writer']}'限制0,$row";

$innertext这个用来获取标签的最底层模板,建立$TERM$ctp,求解最底层模板中的自变量,进行替换。每个人都根据获得的特性编写自己的sql语句。这里大家套用limit0,$row,这样就可以根据$row来确定观看的内容量。
自然,我们可以获得很多功能,让这个标签更加强大。比如我们可以升级一些类似arclist的功能,在函数中解决,但是这个必须要有一些基本的PHP。
接下来,我们将根据执行查询来求解sql并输出自变量:


复制代码编码如下:
$dsql-->;Execute('me',$SQL);
while($RS=$dsql->;getarray('me')]
{
/根据特征解查看自变量
$RS['title']=cn_substr($RS['title'],$titlelen);
//获取最低模板
$CTP-->;loadsource($innertext);
foreach($CTP->;CTagsas$tagid=>$ctag){
if(!empty($RS[strtolow($ctag->;GetName())]){
$CTP->;Assign($tagid,$RS[$ctag->;GetName()]);
}
}
/根据最低模板和查看参数
$revalue获取事件处理。=$CTP-->;GetResult();
}

那样我们就用出现在最底层模板中的相关自变量来改变查看的结果,然后形成一个输出字符串数组,将字符串数组的所有信息内容存储在$revalue中。
最后返回这个值return$revalue
所有文件的内容如下:


复制下面的代码:
if(!defined('DEDEINC')
{
exit("请求错误!");
}
函数lib_writerarc(&;$ctag&;$refobj)
{
global$dsql,$envs
//功能解决方案
$attlist="row|12,titlelen|24";
FillAttsDefault($ctag->;属性->;Items,$attlist);
提取($ctag->;属性->;Items,EXTR_SKIP);
$revue=“”;
$innertext=$ctag->;GetInnerText();
$CTP=newDedeTagParse();
$CTP->;SetNameSpace('field','[',']');
$SQL="SELECT*FROMdede_archivesWHEREwriter='{$refobj->;Fields['writer']}'限制0,$row";
$dsql->;Execute('me',$SQL);
while($RS=$dsql->;getarray('me')]
{
/根据特征解查看自变量
$RS['title']=cn_substr($RS['title'],$titlelen);
//获取最低模板
$CTP-->;loadsource($innertext);
foreach($CTP->;CTagsas$tagid=>$ctag){
if(!empty($RS[strtolow($ctag->;GetName())]){
$CTP->;Assign($tagid,$RS[$ctag->;GetName()]);
}
}
/根据最低级别的模板和查看参数获取事件处理
$revalue。=$CTP-->;GetResult();
}
return$revue;
}
?>
接下来,让我们测试您的标签。让我们更改article_article.htm的模板,添加以下标记代码:
{dede:writerarcrow='10'titlelen='6'}
[field:title/]
{

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/773309.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存