主页 > 帮助中心 > 程序开发 >

扩展标签

来源:织梦官方 作者:信息发布员 发表于:2009-09-29 09:58  点击:
DedeCMS 从 V5.3 开始就支持本人扩展标签。卓绝许多新人很少用那个东西,一丁点儿的仿单下如何编写本人的调用标签。 吾辈需要知道下扩展标签的存放目录及文件名形式构成,扩展的标签都是存放在 /include/taglib 本条目录,名称都是以 标签名 .lib.php 形式,例

 

DedeCMSV5.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;
  }
  ?>
  吾辈报到系统后台的[xpj娱乐场官网xpj娱乐场官网]-[全局标签测试]中运行{dede:demotag/},显示如下的结果:
 
,吾辈会发觉标签起作用了,输出了吾辈的内容。
 
  至此吾辈完成了标签的编写,这里面主要涉及到PHPMySQL的很多知识,需要有一定相关方面的基础才能够编写标签了,当然这里只是一个一丁点儿的标签开发例子,再有许多的东西可以去开发。

  这里吾辈知道。其实标签生成的内容其实是本条函数的一个返回值,这里返回的内容都是字符串。也就是函数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)
  然后吾辈就可以编写查询语句及对底层xpj娱乐场官网xpj娱乐场官网处理的相关函数了
  $revalue = '';
  $innertext = $ctag->GetInnerText();
  $ctp = new DedeTagParse();
  $ctp->SetNameSpace('field', '[', ']');
  $sql = "SELECT * FROM dede_archives WHERE writer='{$refObj->Fields['writer']}' limit 0, $row";
  $innertext本条是用来获得标签的底层xpj娱乐场官网xpj娱乐场官网的。$ctp创建用于处理底层xpj娱乐场官网xpj娱乐场官网中的变量。并处理进行替换。吾辈根据获得的属性同好会编写吾辈的sql语句。这里吾辈使用limit 0, $row。这样就可以根据$row来规定查询的内容数目。
  当然吾辈可以获得更多的属性同好会以便吾辈本条标签更强大。例如吾辈可以增加类似于arclist中的相关属性同好会,并在函数中进行处理,卓绝本条需要有一定的PHP基础。
  然后吾辈通过执行查询对sql及输出变量进行处理:
  $dsql->Execute('me',$sql);
  while($rs = $dsql->GetArray('me'))
  {
  //根据属性同好会处理查询变量
  $rs['title'] = cn_substr($rs['title'], $titlelen);
  //获得底层xpj娱乐场官网xpj娱乐场官网
  $ctp->LoadSource($innertext);
  foreach($ctp->CTags as $tagid=>$ctag) {
  if(!empty($rs[strtolower($ctag->GetName())])) {
  $ctp->Assign($tagid,$rs[$ctag->GetName()]);
  }
  }
  //根据底层xpj娱乐场官网xpj娱乐场官网及查询变量得到处理结果
  $revalue .= $ctp->GetResult();
  }
  这样吾辈就将查询出来的结果同底层xpj娱乐场官网xpj娱乐场官网中出现的相关变量进行替换。然后生成输出字符串,将所有的字符串信息存储到$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);
  //获得底层xpj娱乐场官网xpj娱乐场官网
  $ctp->LoadSource($innertext);
  foreach($ctp->CTags as $tagid=>$ctag) {
  if(!empty($rs[strtolower($ctag->GetName())])) {
  $ctp->Assign($tagid,$rs[$ctag->GetName()]);
  }
  }
  //根据底层xpj娱乐场官网xpj娱乐场官网及查询变量得到处理结果
  $revalue .= $ctp->GetResult();
  }
  return $revalue;
  }
  ?>
  然后吾辈来测试吾辈本条标签,吾辈修改article_article.htmxpj娱乐场官网xpj娱乐场官网,在里面加入以下的标签代码:
  {dede:writerarc row='10' titlelen='6'}
  [field:title/] 

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

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

    有帮助
    (111)
    83.5%
    没帮助
    (22)
    16.5%
  • 上一篇:没有了
  • 下一篇:二次开发的一些长话
  • Baidu