dede自定义模板标签的方法
1、第一种:单条结果类似自定义函数 新建一个名为wnbq2.lib.php的文件保存在include/taglib/文件夹下
代码如下:
<?php
if(!defined('DEDEINC')) exit('Request Error!');
/*
---------------------------
万能调用数据标签
此文件另存为wnbq2.lib.php存放根目录下的include/taglib/文件夹下面
---------------------------
DEMO-----------------------
{dede:wnbq2 tbname="dede_admin" where="userid='admin'" field='pwd'/}
---------------------------
*/
function lib_wnbq2(&$ctag,&$refObj){
global $dsql,$envs;
//属性处理
$attlist="tbname|,where|,field|";
$revlaue = '';
FillAttsDefault($ctag->CAttribute->Items,$attlist);
extract($ctag->CAttribute->Items, EXTR_SKIP);
$sql = "select * from $tbname where $where";
$rs = $dsql->GetOne($sql);
$revalue = $rs[$field];
return $revalue;
}
?>
2、在任何模板文件均可调用调用代码如下:
{dede:wnbq2 tbname='dede_admin' where="userid='admin'" field='pwd'/}
即可通过这个自定义标签来进行sql单条记录查询针对对应字段输出,这里我输出的dede_admin表中固定条件的pwd字段值
3、第二种:多条结果自定义标签循环输出底层模板属性处理新建一个名为wnbq2.lib.php的文件保存在include/taglib/文件夹下 代码如下:
<?php
if(!defined('DEDEINC')){exit("Request Error!");}
/*
---------------------------
万能调用数据标签
此文件另存为wnbq.lib.php存放根目录下的include/taglib/文件夹下面
---------------------------
DEMO-----------------------
{dede:wnbq tbname="dede_admin" row='10' titlelen='6'}
[field:field/]
[field:field/]
[field:field/]
..............
{/dede:wnbq}
---------------------------
*/
function lib_wnbq(&$ctag,&$refObj){
global $dsql,$envs;
//属性处理
$attlist="tbname|,where|,ofield|id,px|desc,row|10,titlelen|24";
FillAttsDefault($ctag->CAttribute->Items,$attlist);
extract($ctag->CAttribute->Items, EXTR_SKIP);
$revalue = '';
$innertext = $ctag->GetInnerText();
$ctp = new DedeTagParse();
$ctp->SetNameSpace('field','[',']');
if(!empty($tbname) && !empty($where)){//这两个条件不能为空
$sql = "select * from $tbname where $where order by $ofield $px limit 0,$row";
} else if(empty($where) && !empty($tbname)) {
$sql = "select * from $tbname order by $ofield $px limit 0,$row";
} else {
return "未指定table_name 请指定table_name再次生成标签!";
exit();
}
$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();
}
return $revalue;
}
?>
4、 在任何模板文件均可调用调用代码如下:
{dede:wnbq tbname="dede_admin" row='10' titlelen='6'}
[field:userid/]
{/dede:wnbq}