/include/taglib 中进行扩展,标签的文件名应该是:标签.lib.php ,例如 arclist 所对应的标签名称则为:arclist.lib.php 。
{dede:test name='dedecms'/} ,那就需要创建一个名为 test.lib.php 的文件。
标签内容的文件结构如下,为一个函数
<?phpif(!defined('DEDEINC')) exit("Request Error!");function lib_test(&$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;}?>
function lib_test(&$ctag,&$refObj) 就是我们标签的扩展函数,所有标签生成的内容都是由这个函数解析后获得的。
$attlist="row|12,titlelen|24" 为系统默认属性的参数,例如我们上面 test 标签需要一个默认的属性 name ,并且 name 为空,则需要更改为:
$attlist="name|"
, 用来隔开各个属性,符号 | 用来分隔变量的名称和值,这里 name| 则代表默认参数 name 为空。
$name 就可以在函数中进行调用了,例如:
function lib_test(&$ctag,&$refObj){global $dsql,$envs;//属性处理$attlist="name|";FillAttsDefault($ctag->CAttribute->Items,$attlist);extract($ctag->CAttribute->Items, EXTR_SKIP);$revalue = '我的名字:'.$name;return $revalue;}
我们在系统后台标签测试器中进行测试:

arclist 、channel 等,我们来扩展下我们上面标签的功能:
{dede:test name='dedecms'/}我的名字叫:[field:name/]{dede:test}
我的名字叫:[field:name/] 则为我们要处理的底层模板,[field:name/] 为我们标签属性中的 name 。
lib_test(&$ctag,&$refObj) 函数中 $ctag 参数,这个参数就是我们解析式模板引擎获取的当前标签内容,其中这个对象下有一个 GetInnerText() 方法能够获取当前标签的底层模板。
<?phpif(!defined('DEDEINC')) exit("Request Error!");function lib_test(&$ctag,&$refObj){global $dsql,$envs;//属性处理$attlist="name|";FillAttsDefault($ctag->CAttribute->Items,$attlist);extract($ctag->CAttribute->Items, EXTR_SKIP);// 获取底层模板$innertext= $ctag->GetInnerText();// 对标签进行解析$revalue = str_replace("[field:name/]", $name, $innertext);return $revalue;}?>
这样我们就完成了一个简单的对底层模板解析的处理。
/include/taglib 其他标签文件。
