Dedecms 自定义标签开发

现在要做一个城市列表标签:要从城市表中获取数据并显示在页面上,系统本身不存在这样的标签,标签取名为citylist

文件部署:自定义标签的程序文件放在/include/taglib目录下

命名规范:标签程序的文件命名为[标签名称]+‘.class.php’

即在/include/taglib目录下,新建一个文件,名为citylist.class.php

编码规范:

<?php  
if(!defined('DEDEINC'))  
{  
    exit("Request Error!");  
}  
function lib_demotag(&$ctag,&$refObj)  
{  
    global $dsql,$envs;  
      
    //属性处理  
    $attlist="row|12,titlelen|24";  
    FillAttsDefault($ctag->CAttribute->Items,$attlist);  
    extract($ctag->CAttribute->Items, EXTR_SKIP);  
    $revalue = '';  
      
    //你需编写的代码,不能用echo之类语法,把最终返回值传给$revalue  
    //------------------------------------------------------  
      
    $revalue = 'Hello Word!';  
      
    //------------------------------------------------------  
    return $revalue;  
}  
?>  


以上代码可通过如下方式查看:后台 - 模板 - 标签源码管理 ,点击页面的右上角[增加一个新的标签]链接进入页面
函数的命名规范:lib_+标签名称,我们的标签函数名称为lib_citylist,两个参数(ctag,refObj)原封不动

具体实现:

function lib_citylist(&$ctag, &$refObj)   
{  
    global $dsql, $envs, $_sys_globals;  
      
    ====必须的代码=====  
    $attlist = "row|10";  
    FillAttsDefault ( $ctag->CAttribute->Items, $attlist );  
    extract ( $ctag->CAttribute->Items, EXTR_SKIP );  
    ====必须的代码=====  
      
    ====数据获取=====  
    $condtion="";  
    $revalue='';  
    $equery="Select id,sortid,att,attname  From tbl_city";  
    if(trim($ctag->GetInnerText())=='') $innertext = "[field:attname /]";  
    else $innertext = $ctag->GetInnerText();  
    $dsql->SetQuery($equery);  
    $dsql->Execute();  
    ====数据获取=====  
  
    ====标签替换=====  
    while($dbrows=$dsql->GetObject())  
    {  
        $rbtext = preg_replace("/\[field:attname([\/\s]{0,})\]/isU",$dbrows->attname, $innertext);  
        $rbtext = preg_replace("/\[field:att([\/\s]{0,})\]/isU",$dbrows->att, $rbtext);  
        $revalue.=$rbtext;  
    }  
    $revalue = preg_replace("/\[field:tid([\/\s]{0,})\]/isU",$_GET['tid'], $revalue);  
    $revalue = preg_replace("/\[field:price([\/\s]{0,})\]/isU",$_GET['price'], $revalue);  
    $revalue = preg_replace("/\[field:is3g([\/\s]{0,})\]/isU",$_GET['is3g'], $revalue);  
  
    ====内容返回=====  
    return $revalue;  
}  


在模板中的应用:
{dede:citylist row=10} --- 内容循环,属性值传递  
<li><a href="list.php?tid=[field:tid /]&price=[field:price /]&citycode=[field:att /]&is3g=[field:is3g /]" >[field:attname /]</a></li>    
{/dede:citylist}

你可能感兴趣的:(PHP,cms,dedecms)