织梦dedecms_自己制作标签教程02.doc_第1页
织梦dedecms_自己制作标签教程02.doc_第2页
织梦dedecms_自己制作标签教程02.doc_第3页
织梦dedecms_自己制作标签教程02.doc_第4页
织梦dedecms_自己制作标签教程02.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

首先我简单的介绍下自己,我是织梦官方团队的天涯,接触织梦也有2年多时间了,之前一直在论坛上做斑竹,认识了很多喜爱织梦的朋友,后来便加入了织梦团队,发现这是一个充满朝气、有激情和学习力的地方,这次受站长网的邀请来给大家做一次DedeCMS程序方面的讲座。因为这次主要是讲座,缺乏体系的培训内容,本次讲座我将织梦技术论坛较为常见的问题加以整理,并结合一些其他方面的应用内容进行补充,让大家更了解DedeCMS程序的使用。安全设置首先是程序安全问题,这里主要是一些拥有独立服务器的站长,如果自己在系统安全部署上面有些经验那应该没有什么问题,有部分站长没有系统安全部署的经验,加上现在挂马猖獗,所以许多人都在担心,官方在早些时候就发了一个关于DedeCms V5.3/V5.5 安全设置指南的主题帖,地址为:/172474.html,这里面说了如何在Win Serv环境配置服务器环境。不过文中提到了织梦的文件目录,这里我对整个系统文件目录进行一个说明:/178324.html,当然,如果你安装个模块会相应的增加一些目录,例如模块group、ask等。dede:sql标签的用法sql标签可以称得上是个万能标签了,查询数据库将其输出,这里介绍一些关于这个标签的用法:1.用来输出统计内容,这个是不错的,举个例子,我们来统计下总共发了多少的文章,思路就是输出dede_addonarticle这个文章附加表内容总数就可以了。dede:sql sql=SELECT COUNT(*) AS nums FROM dede_addonarticlefield:name = nums/dede:sql2.使用field来进行特殊的查询,比如之前论坛上面很多会员需要做一个输出当前发布文章会员的相关内容,之前用sql或者arclist标签是没办法实现的,因为每篇内容是不同的,这里我们来用5.5的sql语句来做个示范。我们首先在文章模板中相应的位置加上下面的标签dede:sql sql=SELECT * FROM dede_archives WHERE writer=writerfield:id/,/dede:sql这个放到article_article.htm页面,将会检索出当前会员发布的相关文章,这里的 writer会根据当前内容的环境变量进行替换后再执行查询。这里出现在SQL语句中条件查询的 writer,也就是$refObj-Fields$value这个里面的相关内容模板中使用PHP许多人希望织梦的模板标签能够更加灵活,加入可以运行PHP的功能,这里在DedeCMS V5.5中就加入了一个可以执行php的特殊标签dede:php/dede:php,这个标签可以执行PHP语句了。我这里举几个常用的例子:1.最简单的输出内容:dede:php$numA = 1;$numB = 2;echo $numA + $numB;/dede:php这个输出的内容是计算结果:32.结合SQL查询输出单条内容dede:php$row = $dsql-GetOne(select id,typename from dede_arctype where id=2);print_r($row);/dede:php这个输出的内容是Array(id = 2typename = 问答)3.获取当前页面的变量比如我们这里进入系统后台的模板-全局标记测试,我们在代码中填入下面的内容:dede:phpprint_r($refObj-Fields);/dede:php如果环境变量保持默认,即“不使用环境ID”,我们会看到以下的结果:Array(typeid = 0phpurl = /plusindexurl = /templeturl = /templetsmemberurl = /memberspecurl = /specialindexname = 主页templetdef = /templets/default)那我们再换个环境变量测试看看,这里以我本地的栏目为测试了:Array(id = 3reid = 0topid = 0sortrank = 1typename = 产品typedir = cmspath/product indexname = 主页templetdef = /templets/defaultposition = 主页 产品 title = 产品)这样一来就检索出当前页面的局部变量了,接下来我们可以来结合前面的SQL语句来实现根据不同环境ID调用内容不同栏目内容。例如:dede:php$thisid = $refObj-Fieldsid;$row = $dsql-GetOne(select id,typename from dede_arctype where id=.$thisid);print_r($row);/dede:php这样是来调用当前栏目的标题,这个标签功能类似于dede:field.typename/写自己的标签,让别人说去吧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/,显示如下的结果:这里我们知道,其实标签生成的内容其实是这个函数的一个返回值,这里返回的内容都是字符串,也就是函数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-Fieldswriter limit 0, $row;$innertext这个是用来获取标签的底层模板的,$ctp创建用于处理底层模板中的变量,并处理进行替换。我们根据获取的属性编写我们的sql语句,这里我们使用limit 0, $row,这样就可以根据$row来确定查询的内容数目。当然我们可以获取更多的属性以便我们这个标签更强大,例如我们可以增加类似于arclist中的相关属性,并在函数中进行处理,不过这个需要有一定的PHP基础。接下来我们通过执行查询对sql及输出变量进行处理:$dsql-Execute(me,$sql);while($rs = $dsql-GetArray(me)/根据属性处理查询变量$rstitle = cn_substr($rstitle, $titlelen);/获取底层模板$ctp-LoadSource($innertext);foreach($ctp-CTags as $tagid=$ctag) if(!empty($rsstrtolower($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-Fieldswriter limit 0, $row;$dsql-Execute(me,$sql);while($rs = $dsql-GetArray(me)/根据属性处理查询变量$rstitle = cn_substr($rstitle, $titlelen);/获取底层模板$ctp-LoadSource($innertext);foreach($ctp-CTags as $tagid=$ctag) if(!empty($rsstrtolower($ctag-GetName() $ctp-Assign($tagid,$rs$ctag-GetName();/根据底层模板及查询变量得到处理结果$revalue .= $ctp-GetResult();return $revalue;?接下来我们来测试我们这个标签,我们修改article_arti

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论