您当前的位置: 主页 > 优化教程
我们需要知道下扩展标签的存放目录及文件名构成,首先,扩展的标签都是存放在/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的很多知识,需要有一定相关方面的基础才能够编写标签了,当然这里只是一个简单的标签开发例子,还有许多的东西可以去开发。
 
 
 
  这里我们知道,其实标签生成的内容其实是这个函数的一个返回值,这里返回的内容都是字符串,也就是函数return $revalue;中的$revalue需要是经过处理后生成的字符串。
  $attlist="row|12,titlelen|24";这个是属性列表,这个经过函数处理后会直接生成变量并复制,我们可以测试下,做如下的修改:
 
 
代码如下:
  $revalue = 'Hello Word!';
  $revalue .="
Row:".$row.";TitleLen:".$titlelen;
 
  这样我们可以看到,这个属性已经被创建变量并且赋值了。
  接下来我们可以再进一步去修改这个标签。
  比如说我们需要写一个标签专门来查询文章内容页的那个相关文章,功能类似于上面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}
 

关键词:DEDECMS,扩展,标签,和,dede,自定义,实现,方法    标签:
    更多资讯请收藏关注 网站模板(www.1yc.cn)

tag标签应该在一篇文章放几个才合理?大家好!今天给大家说一下:tag标签应该在一篇文章放几个呢?标签基本等... 2022-03-26
织梦dede标签:arclist标签使用大全arclist是织梦网站建设计系统中重要的标签,同时也是基础的标签... 2021-09-25
织梦友情链接的a标签显示title的方法有哪些?打开 /include/taglib/flink.lib.php 文件... 2021-09-20
dedecms默认网站地图sitemap.html优化网站地图对于网站优化很重要,搜索引擎就是靠网站地图去收录网站页面,本文... 2021-09-15
织梦dedecms文章标题字数限制的解决方法织梦系统默认的文章标题字数限制是60,也就是30个汉字,不够用怎么办?... 2021-09-13
dedecms织梦怎样设置不同的搜索页模板?织梦的搜索功能很好用,但有时候我们会需要一些特殊的搜索情况,例如我们网... 2021-09-09
dedecms教程:增加栏目图片banner或栏目图片备注:这个对utf8编码有效,gbk需要转码! 首先给每个子栏目增加一... 2021-09-06
网站设计中织梦全局变量调用标签大全织梦DeDeCms仿站过程中用到的全局变量调用标签及路径大全 ,对于菜... 2021-09-06
怎么删除dedecms中指定ip的评论?在网站中很多人都会启用织梦的留言本功能,所以在评论的时候就会有很多会员... 2021-08-19
织梦修改友情链接fink默认样式织梦DedeCMS默认的友情链接调用标签为: {dede:flink ... 2021-07-22
dede让游客也能发布分类信息步 在member/infoadd.php里找到 1.删除Chec... 2021-07-22
dedecms织梦模板内容页调用缩略图的教程文章内容页调用缩略图方法如下两种.种没有大小设置.原图显示.第二种... 2021-07-22
DEDECMS织梦模板标签基本语法解析教程织梦的模板标签类似于XML格式,所有的模板都含有定界符,默认情况下是{... 2021-07-22
dedecms教程:织梦所有实用标签调用方法搜集整理近研究了一下 织梦模板 后台,发现一些非常有用的标签调用的方法,分享... 2021-07-22
织梦DedeCMS循环标签如何调用标签一、调用语句(SQL) 一个数据库管理系统,对数据库的操作不外乎四... 2021-07-22
dede织梦上传的图片相对路径改成路径找到 \include\dialog\select_images_po... 2021-07-22
织梦删除自定义字段变量的方法大家在使用织梦dedecms的过程中,通常都会进行自定义字段变量的添加... 2021-07-27
Dedecms后台文章编辑器空白解决办法进入网站后台,然后在 系统-核心设置 -Html编辑器选项(仅支持 d... 2021-07-27

线
咨询热线:
135-0038-3336
在线客服:
点击这里给我发消息
微信交流:
公司官网: www.1yc.cn