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}

 

posted @ 2014-09-09 12:03  吸_血_鬼  阅读(219)  评论(0)    收藏  举报