一、登录后台,模板—标签源码管理—[增加一个新标签](注意这里,先创建页面,不要着急写代码,保存的时候如果出现“DedeCMS:CSRF Token Check Failed!”,请打开/dede/config.php,在69行左右,那串错误提示函数的第一行加一个return)
二、打开新建的标签页面,如下:
<?php
/* author: zhang
time: 2020-5-13 13:50
qq: 193548305@qq.com
*/
if(!defined('DEDEINC'))
{
exit("Request Error!");
}
//函数名称lib_后面的这个要和文件名一样
function lib_randlist(&$ctag,&$refObj)
{
global $dsql,$envs;
//属性处理
$attlist="row|12,titlelen|24";
FillAttsDefault($ctag->CAttribute->Items,$attlist);
extract($ctag->CAttribute->Items, EXTR_SKIP);
$revalue = '';
//你需编写的代码,不能用echo之类语法,把最终返回值传给$revalue
//------------------------------------------------------
/**获取标签内的值 <span>[field:title/]</span>*/
$innertext = $ctag->GetInnerText();
$ctp = new DedeTagParse(); /** 声明Dede织梦模板类*/
$ctp->SetNameSpace('field', '[', ']'); /** 设置标记的命名空间,默认为dede*/
$sql = "SELECT * FROM `#@__arctype` WHERE ishot=1"; /** 编写sql语句,我们主要是改这个*/
$dsql->Execute('me',$sql); /** 执行一个带返回结果的函数*/
while($rs = $dsql->GetArray('me')) /*我这里只是单纯的查询,下面的不用改*/
{
/**根据属性处理查询变量*/
$rs['title'] = cn_substr($rs['title'], $titlelen);
/**获取底层模板,将模板设置到CTags变量中*/
$ctp->LoadSource($innertext);
foreach($ctp->CTags as $tagid=>$ctag) {
if(!empty($rs[strtolower($ctag->GetName())])) {
$ctp->Assign($tagid,$rs[$ctag->GetName()]);
}
}
/**根据底层模板及查询变量得到处理结果*/
$revalue .= $ctp->GetResult();
}
//------------------------------------------------------
return $revalue;
}
?>
<!-- 字段输出,[]中括号一定不要有空格,不然输不出来 -->
{dede:randlist}
<li><a href="[field:typedir/]">[field:typename/]</a></li>
{/dede:randlist}
<!-- 正确 [field:typedir/] -->
<!-- 错误 [field:typedir /] -->
注:模板页字段输出,不可有空格