dede 自定义标签
由于特殊原因需要二次开发dede,固增加一个自定义标签。
标签目录: \include\taglib
taglib文件夹是所有的dede标签。
在taglib目录下新建一个文件data.lib.php(data为标签名称,lib为dede固定格式)
if(!defined('DEDEINC')) exit('Request Error!');//判断常量是否存在,这行代码可有可无
方法。data为标签名称 $ctag为获取dede模板。
lib_data(&$ctag,&$refObj)
使用sql语句查询时注意关闭安全检测,如若不关闭最新版会报‘错误步骤’
标签中函数中不可输出,只能return.
具体代码
<?php
if(!defined('DEDEINC')) exit('Request Error!');
function lib_bdata(&$ctag,&$refObj){
global $dsql;//获取sql变量
$attlist = "date|".date('Ymd');//属性默认值 "属性|默认值,属性|默认值"
FillAttsDefault($ctag->CAttribute->Items,$attlist);//处理属性
extract($ctag->CAttribute->Items);//extract函数获取属性变量,也可以直接使用$ctag->CAttribute->Items['属性']
$innertext = $ctag->GetInnerText();//获取底层模板,标签实在哪个地方就获取那个地方的模板
$ctp = new DedeTagParse();//处理底层模板中的变量
$ctp->SetNameSpace('field', '[', ']');//显示方式,例如[field:.../]
$sql = 'select * from dede_archives';//sql查询
$dsql->safeCheck = false;//关闭sql验证,如若不关闭新版会报错
$dsql->Execute('me',$sql);//执行sql;
$str = '';
$ctp->LoadString($innertext);//载入模板中的字符串
while($value = $dsql->GetArray('me')){
if(is_array($ctp->CTags))://判断是否存在模板标记
foreach($ctp->CTags as $k=>$ctag):
if($ctag->GetName()=='array'){//可无
//传递整个数组,在runphp模式中有特殊作用
$ctp->Assign($k,$ctag);
} else {
if(!empty($value[$ctag->GetName()]))://判断标记是否存在
$ctp->Assign($k,$value[$ctag->GetName()]);//给输出到模板中的变量赋值
else:
$ctp->Assign($k,'');//设置为空,如若不设置,下面值如果为空,将输出的是上次值。
endif;
}
endforeach;
endif;
$str .= $ctp->GetResult();//处理模板
}
return $str;
}
使用。
{dede:data date='20140704'}
[field:id /]<!--id可以为数据库任意字段名称-->
{/dede:data}
在模板标签中使用判断。
{dede:data runphp='yes'}
[field:id runphp='yes']
if(@me != '' || @me != 0)
@me = '<div class="national_flag '.@me.'"></div>';
else
@me = '';
[/field:id]
{/dede:data}

浙公网安备 33010602011771号