织梦CMS扩展标签的使用方法

DedeCMS从V5.3开始就支持自己扩展标签,不过许多新人很少用那个东西,简单的介绍下如何编写自己的调用标签。我们需要知道下扩展标签的存放目录及文件名构成,首先,扩展的标签都是存放在/include/taglib…

 

DedeCMS从V5.3开始就支持自己扩展标签,不过许多新人很少用那个东西,简单的介绍下如何编写自己的调用标签。
我们需要知道下扩展标签的存放目录及文件名构成,首先,扩展的标签都是存放在/include/taglib这个目录,名称都是以“标签名.lib.php”格式,例如{dede:channel/}标签对应的是channel.lib.php文件。
我们可以看一个示例标签:demotag.lib.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;
}
?>
我们登录系统后台的[模板]-[全局标签测试]中运行{dede:demotag/},显示如下的结果:
 ,我们会发现标签起作用了,输出了我们的内容。
 
至此我们完成了标签的编写,这里面主要涉及到PHP、MySQL的很多知识,需要有一定相关方面的基础才能够编写标签了,当然这里只是一个简单的标签开发例子,还有许多的东西可以去开发。

 织梦CMS扩展标签的使用方法
  这里我们知道,其实标签生成的内容其实是这个函数的一个返回值,这里返回的内容都是字符串,也就是函数return $revalue;中的$revalue需要是经过处理后生成的字符串。
  $attlist="row|12,titlelen|24";这个是属性列表,这个经过函数处理后会直接生成变量并复制,我们可以测试下,做如下的修改:
  $revalue = ‘Hello Word!’;
  $revalue .="
Row:".$row.";TitleLen:".$titlelen;
 织梦CMS扩展标签的使用方法

  这样我们可以看到,这个属性已经被创建变量并且赋值了。
  接下来我们可以再进一步去修改这个标签。
  比如说我们需要写一个标签专门来查询文章内容页的那个相关文章,功能类似于上面sql标签中的那个sql,只是这里我们将其分装为一个标签。
  我们可以新建一个标签,例如叫writerarc,那我们就需要创建一个writerarc.lib.php,然后模仿demotag编写函数,注意需要修改为
  function lib_writerarc(&$ctag,&$refObj)
  接下来我们就可以编写查询语句及对底层模板处理的相关函数了
  $revalue = ”;
  $innertext = $ctag->GetInnerText();
  $ctp = new DedeTagParse();
  $ctp->SetNameSpace(‘field’, ‘[', ']‘);
  $sql = "SELECT * FROM dede_archives WHERE writer=’{$refObj->Fields['writer']}’ limit 0, $row";
  $innertext这个是用来获取标签的底层模板的,$ctp创建用于处理底层模板中的变量,并处理进行替换。我们根据获取的属性编写我们的sql语句,这里我们使用limit 0, $row,这样就可以根据$row来确定查询的内容数目。
  当然我们可以获取更多的属性以便我们这个标签更强大,例如我们可以增加类似于arclist中的相关属性,并在函数中进行处理,不过这个需要有一定的PHP基础。
  接下来我们通过执行查询对sql及输出变量进行处理:
  $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();
  }
  这样我们就将查询出来的结果同底层模板中出现的相关变量进行替换,然后生成输出字符串,将所有的字符串信息存储到$revalue中。
  最后返回这个值return $revalue;
  整个文件内容如下:
   
  if(!defined(‘DEDEINC’))
  {
  exit("Request Error!");
  }
  function lib_writerarc(&$ctag,&$refObj)
  {
  global $dsql,$envs;
  //属性处理
  $attlist="row|12,titlelen|24";
  FillAttsDefault($ctag->CAttribute->Items,$attlist);
  extract($ctag->CAttribute->Items, EXTR_SKIP);
  $revalue = ”;
  $innertext = $ctag->GetInnerText();
  $ctp = new DedeTagParse();
  $ctp->SetNameSpace(‘field’, ‘[', ']‘);
  $sql = "SELECT * FROM dede_archives WHERE writer=’{$refObj->Fields['writer']}’ limit 0, $row";
  $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;
  }
  ?>
  接下来我们来测试我们这个标签,我们修改article_article.htm模板,在里面加入以下的标签代码:
  {dede:writerarc row=’10′ titlelen=’6′}
  [field:title/] 

  {/dede:writerarc}
  通过动态浏览页面进行查看调试http://www.dedecms.com/plus/view.php?aid=3

 织梦CMS扩展标签的使用方法

  至此我们完成了标签的编写,这里面主要涉及到PHPMySQL的很多知识,需要有一定相关方面的基础才能够编写标签了,当然这里只是一个简单的标签开发例子,还有许多的东西可以去开发。

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

安装DEDECMS出现Deprecated: Function ereg_replace() is deprecated in 的原因通常出现在低版本的织梦程序上如dedecms v5.6版本,下面跟版网小编为大家分享下这种情况的解决方法: DEDE中有很多地方的正则函数都用的ereg_replace,而这个函数现在在PHP5.3中
我们在使用织梦时候,需要用到统计子栏目数量。要怎么实现呢?下面跟版网小编为大家讲解下: 其实主要是利用{dede:field.typeid/}这个标签实现。 标签如下: {dede:field.typeid runphp=yes}$id = @me;global $dsql;$sql=select COUNT(id) as num from dede_
有些朋友可能在使用最新版V57 后台-系统基本参数设置中添加新变量时候出现:Request var not allow! 后面经过小编查看,找到了方法,和大家一起来分享: 找到:根目录-include-common.inc.php if( strlen($svar)0 preg_match(#^(cfg_|GLOBALS|_GET|_POST|_CO
ShowMsg(成功登录,现在转向指定页面...,javascript:location.replace(document.referrer);,0,2000); 返回并刷新页面: 这个地方填写:location.replace(document.referrer); ShowMsg(成功登录,现在转向指定页面...,-1,0,2000); 返回不刷新页面: 如果填写
在用织梦做一些项目时,时常会碰到需要在当前页面调用顶级栏目名称的时候,织梦默认{dede:field name=typename /} 可以获取当前栏目页上一级栏目的名称,而不是当前栏目顶级栏目名称。 使用时一定要注意是不是需要修改查询语句表的前缀 下面拓展出一个方法来
织梦系统的功能是很强大的,可以搭建小说和漫画站,这些功能主要是小说模块实现的。织梦系统的小说模块怎么搭建小说和漫画站?下面就是dedecms小说管理模块的使用说明。 1. 小说管理模块使用说明 小说模块功能很强大,可以用他做小说或者漫画站。他们都可以